staging: erofs: remove unneeded inode_operations

Currently, EROFS uses generic iops when xattr is off,
it seems unnecessary and a lot of extra code is there.
Let's follow what other filesystems do instead.

Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Gao Xiang 2019-01-14 19:40:24 +08:00 committed by Greg Kroah-Hartman
parent 7077fffcb0
commit 609398266c
4 changed files with 39 additions and 67 deletions

View File

@ -184,32 +184,18 @@ static int fill_inode(struct inode *inode, int isdir)
if (!err) { if (!err) {
/* setup the new inode */ /* setup the new inode */
if (S_ISREG(inode->i_mode)) { if (S_ISREG(inode->i_mode)) {
#ifdef CONFIG_EROFS_FS_XATTR inode->i_op = &erofs_generic_iops;
inode->i_op = &erofs_generic_xattr_iops;
#endif
inode->i_fop = &generic_ro_fops; inode->i_fop = &generic_ro_fops;
} else if (S_ISDIR(inode->i_mode)) { } else if (S_ISDIR(inode->i_mode)) {
inode->i_op = inode->i_op = &erofs_dir_iops;
#ifdef CONFIG_EROFS_FS_XATTR
&erofs_dir_xattr_iops;
#else
&erofs_dir_iops;
#endif
inode->i_fop = &erofs_dir_fops; inode->i_fop = &erofs_dir_fops;
} else if (S_ISLNK(inode->i_mode)) { } else if (S_ISLNK(inode->i_mode)) {
/* by default, page_get_link is used for symlink */ /* by default, page_get_link is used for symlink */
inode->i_op = inode->i_op = &erofs_symlink_iops;
#ifdef CONFIG_EROFS_FS_XATTR
&erofs_symlink_xattr_iops,
#else
&page_symlink_inode_operations;
#endif
inode_nohighmem(inode); inode_nohighmem(inode);
} else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
#ifdef CONFIG_EROFS_FS_XATTR inode->i_op = &erofs_generic_iops;
inode->i_op = &erofs_special_inode_operations;
#endif
init_special_inode(inode, inode->i_mode, inode->i_rdev); init_special_inode(inode, inode->i_mode, inode->i_rdev);
} else { } else {
err = -EIO; err = -EIO;
@ -297,23 +283,23 @@ struct inode *erofs_iget(struct super_block *sb,
return inode; return inode;
} }
const struct inode_operations erofs_generic_iops = {
#ifdef CONFIG_EROFS_FS_XATTR #ifdef CONFIG_EROFS_FS_XATTR
const struct inode_operations erofs_generic_xattr_iops = {
.listxattr = erofs_listxattr, .listxattr = erofs_listxattr,
};
const struct inode_operations erofs_symlink_xattr_iops = {
.get_link = page_get_link,
.listxattr = erofs_listxattr,
};
const struct inode_operations erofs_special_inode_operations = {
.listxattr = erofs_listxattr,
};
const struct inode_operations erofs_fast_symlink_xattr_iops = {
.get_link = simple_get_link,
.listxattr = erofs_listxattr,
};
#endif #endif
};
const struct inode_operations erofs_symlink_iops = {
.get_link = page_get_link,
#ifdef CONFIG_EROFS_FS_XATTR
.listxattr = erofs_listxattr,
#endif
};
const struct inode_operations erofs_fast_symlink_iops = {
.get_link = simple_get_link,
#ifdef CONFIG_EROFS_FS_XATTR
.listxattr = erofs_listxattr,
#endif
};

View File

@ -414,8 +414,6 @@ static inline bool is_inode_layout_inline(struct inode *inode)
} }
extern const struct super_operations erofs_sops; extern const struct super_operations erofs_sops;
extern const struct inode_operations erofs_dir_iops;
extern const struct file_operations erofs_dir_fops;
extern const struct address_space_operations erofs_raw_access_aops; extern const struct address_space_operations erofs_raw_access_aops;
#ifdef CONFIG_EROFS_FS_ZIP #ifdef CONFIG_EROFS_FS_ZIP
@ -559,38 +557,34 @@ static inline unsigned long erofs_inode_hash(erofs_nid_t nid)
extern struct inode *erofs_iget(struct super_block *sb, extern struct inode *erofs_iget(struct super_block *sb,
erofs_nid_t nid, bool dir); erofs_nid_t nid, bool dir);
/* dir.c */ extern const struct inode_operations erofs_generic_iops;
int erofs_namei(struct inode *dir, struct qstr *name, extern const struct inode_operations erofs_symlink_iops;
erofs_nid_t *nid, unsigned *d_type); extern const struct inode_operations erofs_fast_symlink_iops;
#ifdef CONFIG_EROFS_FS_XATTR
/* xattr.c */
extern const struct xattr_handler *erofs_xattr_handlers[];
/* symlink and special inode */
extern const struct inode_operations erofs_symlink_xattr_iops;
extern const struct inode_operations erofs_fast_symlink_xattr_iops;
extern const struct inode_operations erofs_special_inode_operations;
#endif
static inline void set_inode_fast_symlink(struct inode *inode) static inline void set_inode_fast_symlink(struct inode *inode)
{ {
#ifdef CONFIG_EROFS_FS_XATTR inode->i_op = &erofs_fast_symlink_iops;
inode->i_op = &erofs_fast_symlink_xattr_iops;
#else
inode->i_op = &simple_symlink_inode_operations;
#endif
} }
static inline bool is_inode_fast_symlink(struct inode *inode) static inline bool is_inode_fast_symlink(struct inode *inode)
{ {
#ifdef CONFIG_EROFS_FS_XATTR return inode->i_op == &erofs_fast_symlink_iops;
return inode->i_op == &erofs_fast_symlink_xattr_iops;
#else
return inode->i_op == &simple_symlink_inode_operations;
#endif
} }
/* namei.c */
extern const struct inode_operations erofs_dir_iops;
int erofs_namei(struct inode *dir, struct qstr *name,
erofs_nid_t *nid, unsigned int *d_type);
/* dir.c */
extern const struct file_operations erofs_dir_fops;
#ifdef CONFIG_EROFS_FS_XATTR
/* xattr.c */
extern const struct xattr_handler *erofs_xattr_handlers[];
#endif
static inline void *erofs_vmap(struct page **pages, unsigned int count) static inline void *erofs_vmap(struct page **pages, unsigned int count)
{ {
#ifdef CONFIG_EROFS_FS_USE_VM_MAP_RAM #ifdef CONFIG_EROFS_FS_USE_VM_MAP_RAM

View File

@ -235,10 +235,6 @@ static struct dentry *erofs_lookup(struct inode *dir,
const struct inode_operations erofs_dir_iops = { const struct inode_operations erofs_dir_iops = {
.lookup = erofs_lookup, .lookup = erofs_lookup,
};
const struct inode_operations erofs_dir_xattr_iops = {
.lookup = erofs_lookup,
#ifdef CONFIG_EROFS_FS_XATTR #ifdef CONFIG_EROFS_FS_XATTR
.listxattr = erofs_listxattr, .listxattr = erofs_listxattr,
#endif #endif

View File

@ -68,10 +68,6 @@ static const struct xattr_handler *xattr_handler_map[] = {
} }
#ifdef CONFIG_EROFS_FS_XATTR #ifdef CONFIG_EROFS_FS_XATTR
extern const struct inode_operations erofs_generic_xattr_iops;
extern const struct inode_operations erofs_dir_xattr_iops;
int erofs_getxattr(struct inode *, int, const char *, void *, size_t); int erofs_getxattr(struct inode *, int, const char *, void *, size_t);
ssize_t erofs_listxattr(struct dentry *, char *, size_t); ssize_t erofs_listxattr(struct dentry *, char *, size_t);
#else #else