Avoid ELOOP on auto-mounted snapshots

Ensure that the path member pointers are associated with the
newly-mounted snapshot when zpl_snapdir_automount() returns.  Otherwise
the follow_automount() function may be called repeatedly, leading to an
incorrect ELOOP error return. This problem was observed as a 'Too many
levels of symbolic links' error from user-space commands accessing an
unmounted snapshot in the .zfs/snapshot directory.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #816
This commit is contained in:
Ned Bass 2012-12-12 15:55:51 -08:00 committed by Brian Behlendorf
parent 2ae1031962
commit 7afcf5b1da

View File

@ -356,6 +356,13 @@ zpl_snapdir_automount(struct path *path)
if (error) if (error)
return ERR_PTR(error); return ERR_PTR(error);
/*
* Ensure path->dentry points to the dentry for the root of the
* newly-mounted snapshot, otherwise this function may be called
* repeatedly which can lead to an incorrect ELOOP error return.
*/
follow_up(path);
/* /*
* Rather than returning the new vfsmount for the snapshot we must * Rather than returning the new vfsmount for the snapshot we must
* return NULL to indicate a mount collision. This is done because * return NULL to indicate a mount collision. This is done because