@@ -367,15 +367,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,
@@ -672,6 +672,7 @@ struct ll_sb_info {
struct obd_device *ll_dt_obd;
struct dentry *ll_debugfs_entry;
struct lu_fid ll_root_fid; /* root object fid */
+ struct mnt_namespace *ll_mnt_ns;
DECLARE_BITMAP(ll_flags, LL_SBI_NUM_FLAGS); /* enum ll_sbi_flags */
unsigned int ll_xattr_cache_enabled:1,
@@ -445,6 +445,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt)
sb->s_maxbytes = MAX_LFS_FILESIZE;
sbi->ll_namelen = osfs->os_namelen;
sbi->ll_mnt.mnt = current->fs->root.mnt;
+ sbi->ll_mnt_ns = current->nsproxy->mnt_ns;
if (test_bit(LL_SBI_USER_XATTR, sbi->ll_flags) &&
!(data->ocd_connect_flags & OBD_CONNECT_XATTR)) {