2020-05-22 04:56:37

by Chengguang Xu

[permalink] [raw]
Subject: [PATCH 1/2] ext2: fix incorrect i_op for special inode

We should always set &ext2_special_inode_operations to i_op
for special inode regardless of CONFIG_EXT2_FS_XATTR setting.

Signed-off-by: Chengguang Xu <[email protected]>
---
fs/ext2/namei.c | 2 --
1 file changed, 2 deletions(-)

diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c
index ccfbbf59e2fc..1a5421a34ef7 100644
--- a/fs/ext2/namei.c
+++ b/fs/ext2/namei.c
@@ -136,9 +136,7 @@ static int ext2_mknod (struct inode * dir, struct dentry *dentry, umode_t mode,
err = PTR_ERR(inode);
if (!IS_ERR(inode)) {
init_special_inode(inode, inode->i_mode, rdev);
-#ifdef CONFIG_EXT2_FS_XATTR
inode->i_op = &ext2_special_inode_operations;
-#endif
mark_inode_dirty(inode);
err = ext2_add_nondir(dentry, inode);
}
--
2.20.1



2020-05-22 04:56:37

by Chengguang Xu

[permalink] [raw]
Subject: [PATCH 2/2] ext2: code cleanup by removing ifdef macro surrounding

Define ext2_listxattr to NULL when CONFIG_EROFS_FS_XATTR
is not enabled, then we can remove many ugly ifdef macros
in the code.

Signed-off-by: Chengguang Xu <[email protected]>
---
fs/ext2/file.c | 2 --
fs/ext2/namei.c | 4 ----
fs/ext2/symlink.c | 4 ----
fs/ext2/xattr.h | 1 +
4 files changed, 1 insertion(+), 10 deletions(-)

diff --git a/fs/ext2/file.c b/fs/ext2/file.c
index 39c4772e96c9..b4de9a0f170d 100644
--- a/fs/ext2/file.c
+++ b/fs/ext2/file.c
@@ -196,9 +196,7 @@ const struct file_operations ext2_file_operations = {
};

const struct inode_operations ext2_file_inode_operations = {
-#ifdef CONFIG_EXT2_FS_XATTR
.listxattr = ext2_listxattr,
-#endif
.getattr = ext2_getattr,
.setattr = ext2_setattr,
.get_acl = ext2_get_acl,
diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c
index 1a5421a34ef7..ba3e3e075891 100644
--- a/fs/ext2/namei.c
+++ b/fs/ext2/namei.c
@@ -411,9 +411,7 @@ const struct inode_operations ext2_dir_inode_operations = {
.rmdir = ext2_rmdir,
.mknod = ext2_mknod,
.rename = ext2_rename,
-#ifdef CONFIG_EXT2_FS_XATTR
.listxattr = ext2_listxattr,
-#endif
.getattr = ext2_getattr,
.setattr = ext2_setattr,
.get_acl = ext2_get_acl,
@@ -422,9 +420,7 @@ const struct inode_operations ext2_dir_inode_operations = {
};

const struct inode_operations ext2_special_inode_operations = {
-#ifdef CONFIG_EXT2_FS_XATTR
.listxattr = ext2_listxattr,
-#endif
.getattr = ext2_getattr,
.setattr = ext2_setattr,
.get_acl = ext2_get_acl,
diff --git a/fs/ext2/symlink.c b/fs/ext2/symlink.c
index 00cdb8679486..948d3a441403 100644
--- a/fs/ext2/symlink.c
+++ b/fs/ext2/symlink.c
@@ -25,16 +25,12 @@ const struct inode_operations ext2_symlink_inode_operations = {
.get_link = page_get_link,
.getattr = ext2_getattr,
.setattr = ext2_setattr,
-#ifdef CONFIG_EXT2_FS_XATTR
.listxattr = ext2_listxattr,
-#endif
};

const struct inode_operations ext2_fast_symlink_inode_operations = {
.get_link = simple_get_link,
.getattr = ext2_getattr,
.setattr = ext2_setattr,
-#ifdef CONFIG_EXT2_FS_XATTR
.listxattr = ext2_listxattr,
-#endif
};
diff --git a/fs/ext2/xattr.h b/fs/ext2/xattr.h
index 16272e6ddcf4..7925f596e8e2 100644
--- a/fs/ext2/xattr.h
+++ b/fs/ext2/xattr.h
@@ -100,6 +100,7 @@ static inline void ext2_xattr_destroy_cache(struct mb_cache *cache)
}

#define ext2_xattr_handlers NULL
+#define ext2_listxattr NULL

# endif /* CONFIG_EXT2_FS_XATTR */

--
2.20.1


2020-05-22 13:16:49

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH 1/2] ext2: fix incorrect i_op for special inode

On Fri 22-05-20 12:40:34, Chengguang Xu wrote:
> We should always set &ext2_special_inode_operations to i_op
> for special inode regardless of CONFIG_EXT2_FS_XATTR setting.
>
> Signed-off-by: Chengguang Xu <[email protected]>

Thanks. I've applied both patches. I've just slightly expanded changelog of
this patch to better explain the implications of the change.

Honza

> ---
> fs/ext2/namei.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c
> index ccfbbf59e2fc..1a5421a34ef7 100644
> --- a/fs/ext2/namei.c
> +++ b/fs/ext2/namei.c
> @@ -136,9 +136,7 @@ static int ext2_mknod (struct inode * dir, struct dentry *dentry, umode_t mode,
> err = PTR_ERR(inode);
> if (!IS_ERR(inode)) {
> init_special_inode(inode, inode->i_mode, rdev);
> -#ifdef CONFIG_EXT2_FS_XATTR
> inode->i_op = &ext2_special_inode_operations;
> -#endif
> mark_inode_dirty(inode);
> err = ext2_add_nondir(dentry, inode);
> }
> --
> 2.20.1
>
>
--
Jan Kara <[email protected]>
SUSE Labs, CR