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
if (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
* return NULL to indicate a mount collision. This is done because