diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/dcache.c | 11 | ||||
-rw-r--r-- | fs/inode.c | 4 | ||||
-rw-r--r-- | fs/namespace.c | 8 |
3 files changed, 8 insertions, 15 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index d3c2fedada14..87cf545feeeb 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -2937,17 +2937,6 @@ restart: vfsmnt = &mnt->mnt; continue; } - /* - * Filesystems needing to implement special "root names" - * should do so with ->d_dname() - */ - if (IS_ROOT(dentry) && - (dentry->d_name.len != 1 || - dentry->d_name.name[0] != '/')) { - WARN(1, "Root dentry has weird name <%.*s>\n", - (int) dentry->d_name.len, - dentry->d_name.name); - } if (!error) error = is_mounted(vfsmnt) ? 1 : 2; break; diff --git a/fs/inode.c b/fs/inode.c index e846a32e8d6e..644875bcc846 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -1631,8 +1631,8 @@ int file_remove_suid(struct file *file) error = security_inode_killpriv(dentry); if (!error && killsuid) error = __remove_suid(dentry, killsuid); - if (!error && (inode->i_sb->s_flags & MS_NOSEC)) - inode->i_flags |= S_NOSEC; + if (!error) + inode_has_no_xattr(inode); return error; } diff --git a/fs/namespace.c b/fs/namespace.c index 1e06f2df10c8..6247d1aed5df 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -3058,11 +3058,15 @@ bool fs_fully_visible(struct file_system_type *type) if (mnt->mnt.mnt_root != mnt->mnt.mnt_sb->s_root) continue; - /* This mount is not fully visible if there are any child mounts - * that cover anything except for empty directories. + /* This mount is not fully visible if there are any + * locked child mounts that cover anything except for + * empty directories. */ list_for_each_entry(child, &mnt->mnt_mounts, mnt_child) { struct inode *inode = child->mnt_mountpoint->d_inode; + /* Only worry about locked mounts */ + if (!(mnt->mnt.mnt_flags & MNT_LOCKED)) + continue; if (!S_ISDIR(inode->i_mode)) goto next; if (inode->i_nlink > 2) |