mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-20 05:31:15 +00:00
reiserfs: fix extended attributes on the root directory
Since commitd0a5b995a3
(vfs: Add IOP_XATTR inode operations flag) extended attributes haven't worked on the root directory in reiserfs. This is due to reiserfs conditionally setting the sb->s_xattrs handler array depending on whether it located or create the internal privroot directory. It necessarily does this after the root inode is already read in. The IOP_XATTR flag is set during inode initialization, so it never gets set on the root directory. This commit unconditionally assigns sb->s_xattrs and clears IOP_XATTR on internal inodes. The old return values due to the conditional assignment are handled via open_xa_root, which now returns EOPNOTSUPP as the VFS would have done. Link: https://lore.kernel.org/r/20191024143127.17509-1-jeffm@suse.com CC: stable@vger.kernel.org Fixes:d0a5b995a3
("vfs: Add IOP_XATTR inode operations flag") Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
acd1f04679
commit
60e4cf67a5
6 changed files with 32 additions and 14 deletions
|
@ -2097,6 +2097,15 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
|
|||
goto out_inserted_sd;
|
||||
}
|
||||
|
||||
/*
|
||||
* Mark it private if we're creating the privroot
|
||||
* or something under it.
|
||||
*/
|
||||
if (IS_PRIVATE(dir) || dentry == REISERFS_SB(sb)->priv_root) {
|
||||
inode->i_flags |= S_PRIVATE;
|
||||
inode->i_opflags &= ~IOP_XATTR;
|
||||
}
|
||||
|
||||
if (reiserfs_posixacl(inode->i_sb)) {
|
||||
reiserfs_write_unlock(inode->i_sb);
|
||||
retval = reiserfs_inherit_default_acl(th, dir, dentry, inode);
|
||||
|
@ -2111,8 +2120,7 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
|
|||
reiserfs_warning(inode->i_sb, "jdm-13090",
|
||||
"ACLs aren't enabled in the fs, "
|
||||
"but vfs thinks they are!");
|
||||
} else if (IS_PRIVATE(dir))
|
||||
inode->i_flags |= S_PRIVATE;
|
||||
}
|
||||
|
||||
if (security->name) {
|
||||
reiserfs_write_unlock(inode->i_sb);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue