Commit 60939826 authored by Gao Xiang's avatar Gao Xiang Committed by Greg Kroah-Hartman
Browse files

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: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarGao Xiang <gaoxiang25@huawei.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7077fffc
Loading
Loading
Loading
Loading
+12 −26
Original line number Diff line number Diff line
@@ -184,32 +184,18 @@ static int fill_inode(struct inode *inode, int isdir)
	if (!err) {
		/* setup the new inode */
		if (S_ISREG(inode->i_mode)) {
#ifdef CONFIG_EROFS_FS_XATTR
			inode->i_op = &erofs_generic_xattr_iops;
#endif
			inode->i_op = &erofs_generic_iops;
			inode->i_fop = &generic_ro_fops;
		} else if (S_ISDIR(inode->i_mode)) {
			inode->i_op =
#ifdef CONFIG_EROFS_FS_XATTR
				&erofs_dir_xattr_iops;
#else
				&erofs_dir_iops;
#endif
			inode->i_op = &erofs_dir_iops;
			inode->i_fop = &erofs_dir_fops;
		} else if (S_ISLNK(inode->i_mode)) {
			/* by default, page_get_link is used for symlink */
			inode->i_op =
#ifdef CONFIG_EROFS_FS_XATTR
				&erofs_symlink_xattr_iops,
#else
				&page_symlink_inode_operations;
#endif
			inode->i_op = &erofs_symlink_iops;
			inode_nohighmem(inode);
		} else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
			S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
#ifdef CONFIG_EROFS_FS_XATTR
			inode->i_op = &erofs_special_inode_operations;
#endif
			inode->i_op = &erofs_generic_iops;
			init_special_inode(inode, inode->i_mode, inode->i_rdev);
		} else {
			err = -EIO;
@@ -297,23 +283,23 @@ struct inode *erofs_iget(struct super_block *sb,
	return inode;
}

const struct inode_operations erofs_generic_iops = {
#ifdef CONFIG_EROFS_FS_XATTR
const struct inode_operations erofs_generic_xattr_iops = {
	.listxattr = erofs_listxattr,
#endif
};

const struct inode_operations erofs_symlink_xattr_iops = {
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_special_inode_operations = {
	.listxattr = erofs_listxattr,
};

const struct inode_operations erofs_fast_symlink_xattr_iops = {
const struct inode_operations erofs_fast_symlink_iops = {
	.get_link = simple_get_link,
#ifdef CONFIG_EROFS_FS_XATTR
	.listxattr = erofs_listxattr,
};
#endif
};
+18 −24
Original line number Diff line number Diff line
@@ -414,8 +414,6 @@ static inline bool is_inode_layout_inline(struct inode *inode)
}

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;
#ifdef CONFIG_EROFS_FS_ZIP
@@ -559,37 +557,33 @@ static inline unsigned long erofs_inode_hash(erofs_nid_t nid)
extern struct inode *erofs_iget(struct super_block *sb,
	erofs_nid_t nid, bool dir);

/* dir.c */
int erofs_namei(struct inode *dir, struct qstr *name,
	erofs_nid_t *nid, unsigned *d_type);

#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
extern const struct inode_operations erofs_generic_iops;
extern const struct inode_operations erofs_symlink_iops;
extern const struct inode_operations erofs_fast_symlink_iops;

static inline void set_inode_fast_symlink(struct inode *inode)
{
#ifdef CONFIG_EROFS_FS_XATTR
	inode->i_op = &erofs_fast_symlink_xattr_iops;
#else
	inode->i_op = &simple_symlink_inode_operations;
#endif
	inode->i_op = &erofs_fast_symlink_iops;
}

static inline bool is_inode_fast_symlink(struct inode *inode)
{
	return inode->i_op == &erofs_fast_symlink_iops;
}

/* 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
	return inode->i_op == &erofs_fast_symlink_xattr_iops;
#else
	return inode->i_op == &simple_symlink_inode_operations;
/* xattr.c */
extern const struct xattr_handler *erofs_xattr_handlers[];
#endif
}

static inline void *erofs_vmap(struct page **pages, unsigned int count)
{
+0 −4
Original line number Diff line number Diff line
@@ -235,10 +235,6 @@ static struct dentry *erofs_lookup(struct inode *dir,

const struct inode_operations erofs_dir_iops = {
	.lookup = erofs_lookup,
};

const struct inode_operations erofs_dir_xattr_iops = {
	.lookup = erofs_lookup,
#ifdef CONFIG_EROFS_FS_XATTR
	.listxattr = erofs_listxattr,
#endif
+0 −4
Original line number Diff line number Diff line
@@ -68,10 +68,6 @@ static const struct xattr_handler *xattr_handler_map[] = {
}

#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);
ssize_t erofs_listxattr(struct dentry *, char *, size_t);
#else