Whamcloud - gitweb
LU-14651 llite: extend inode methods with user namespace arg
[fs/lustre-release.git] / lustre / llite / llite_foreign_symlink.c
index d401fa0..b9ee7da 100644 (file)
@@ -430,15 +430,15 @@ static struct dentry *ll_foreign_dir_lookup(struct inode *parent,
 
 static bool has_same_mount_namespace(struct ll_sb_info *sbi)
 {
-       int rc;
+       bool same;
 
-       rc = (sbi->ll_mnt.mnt == current->fs->root.mnt);
-       if (!rc)
+       same = (sbi->ll_mnt_ns == current->nsproxy->mnt_ns);
+       if (!same)
                LCONSOLE_WARN("%s: client mount %s and '%s.%d' not in same mnt-namespace\n",
                              sbi->ll_fsname, sbi->ll_kset.kobj.name,
                              current->comm, current->pid);
 
-       return rc;
+       return same;
 }
 
 ssize_t foreign_symlink_enable_show(struct kobject *kobj,
@@ -795,6 +795,31 @@ failed:
        RETURN(rc == 0 ? count : rc);
 }
 
+/* foreign fake-symlink version of ll_getattr() */
+#if defined(HAVE_USER_NAMESPACE_ARG)
+int ll_foreign_symlink_getattr(struct user_namespace *mnt_userns,
+                              const struct path *path, struct kstat *stat,
+                              u32 request_mask, unsigned int flags)
+{
+       return ll_getattr_dentry(path->dentry, stat, request_mask, flags,
+                                true);
+}
+#elif defined(HAVE_INODEOPS_ENHANCED_GETATTR)
+int ll_foreign_symlink_getattr(const struct path *path, struct kstat *stat,
+                              u32 request_mask, unsigned int flags)
+{
+       return ll_getattr_dentry(path->dentry, stat, request_mask, flags,
+                                true);
+}
+#else
+int ll_foreign_symlink_getattr(struct vfsmount *mnt, struct dentry *de,
+                              struct kstat *stat)
+{
+       return ll_getattr_dentry(de, stat, STATX_BASIC_STATS,
+                                AT_STATX_SYNC_AS_STAT, true);
+}
+#endif
+
 struct inode_operations ll_foreign_file_symlink_inode_operations = {
 #ifdef HAVE_IOP_GENERIC_READLINK
        .readlink       = generic_readlink,
@@ -838,20 +863,3 @@ struct inode_operations ll_foreign_dir_symlink_inode_operations = {
 #endif
        .listxattr      = ll_listxattr,
 };
-
-/* foreign fake-symlink version of ll_getattr() */
-#ifdef HAVE_INODEOPS_ENHANCED_GETATTR
-int ll_foreign_symlink_getattr(const struct path *path, struct kstat *stat,
-                              u32 request_mask, unsigned int flags)
-{
-       return ll_getattr_dentry(path->dentry, stat, request_mask, flags,
-                                true);
-}
-#else
-int ll_foreign_symlink_getattr(struct vfsmount *mnt, struct dentry *de,
-                              struct kstat *stat)
-{
-       return ll_getattr_dentry(de, stat, STATX_BASIC_STATS,
-                                AT_STATX_SYNC_AS_STAT, true);
-}
-#endif