On Mon 14-06-21 08:15:11, Christoph Hellwig wrote: > Move the ramfs aops to libfs and reuse them for kernfs and configfs. > Thosw two did not wire up ->set_page_dirty before and now get > __set_page_dirty_no_writeback, which is the right one for no-writeback > address_space usage. > > Drop the now unused exports of the libfs helpers only used for > ramfs-style pagecache usage. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/configfs/inode.c | 8 +------- > fs/kernfs/inode.c | 8 +------- > fs/libfs.c | 17 +++++++++++++---- > fs/ramfs/inode.c | 9 +-------- > include/linux/fs.h | 5 +---- > 5 files changed, 17 insertions(+), 30 deletions(-) > > diff --git a/fs/configfs/inode.c b/fs/configfs/inode.c > index eb5ec3e46283..b601610e9907 100644 > --- a/fs/configfs/inode.c > +++ b/fs/configfs/inode.c > @@ -28,12 +28,6 @@ > static struct lock_class_key default_group_class[MAX_LOCK_DEPTH]; > #endif > > -static const struct address_space_operations configfs_aops = { > - .readpage = simple_readpage, > - .write_begin = simple_write_begin, > - .write_end = simple_write_end, > -}; > - > static const struct inode_operations configfs_inode_operations ={ > .setattr = configfs_setattr, > }; > @@ -114,7 +108,7 @@ struct inode *configfs_new_inode(umode_t mode, struct configfs_dirent *sd, > struct inode * inode = new_inode(s); > if (inode) { > inode->i_ino = get_next_ino(); > - inode->i_mapping->a_ops = &configfs_aops; > + inode->i_mapping->a_ops = &ram_aops; > inode->i_op = &configfs_inode_operations; > > if (sd->s_iattr) { > diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c > index d73950fc3d57..26f2aa3586f9 100644 > --- a/fs/kernfs/inode.c > +++ b/fs/kernfs/inode.c > @@ -17,12 +17,6 @@ > > #include "kernfs-internal.h" > > -static const struct address_space_operations kernfs_aops = { > - .readpage = simple_readpage, > - .write_begin = simple_write_begin, > - .write_end = simple_write_end, > -}; > - > static const struct inode_operations kernfs_iops = { > .permission = kernfs_iop_permission, > .setattr = kernfs_iop_setattr, > @@ -203,7 +197,7 @@ static void kernfs_init_inode(struct kernfs_node *kn, struct inode *inode) > { > kernfs_get(kn); > inode->i_private = kn; > - inode->i_mapping->a_ops = &kernfs_aops; > + inode->i_mapping->a_ops = &ram_aops; > inode->i_op = &kernfs_iops; > inode->i_generation = kernfs_gen(kn); > > diff --git a/fs/libfs.c b/fs/libfs.c > index e9b29c6ffccb..2d7f086b93d6 100644 > --- a/fs/libfs.c > +++ b/fs/libfs.c > @@ -512,7 +512,7 @@ int simple_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, > } > EXPORT_SYMBOL(simple_setattr); > > -int simple_readpage(struct file *file, struct page *page) > +static int simple_readpage(struct file *file, struct page *page) > { > clear_highpage(page); > flush_dcache_page(page); > @@ -520,7 +520,6 @@ int simple_readpage(struct file *file, struct page *page) > unlock_page(page); > return 0; > } > -EXPORT_SYMBOL(simple_readpage); > > int simple_write_begin(struct file *file, struct address_space *mapping, > loff_t pos, unsigned len, unsigned flags, > @@ -568,7 +567,7 @@ EXPORT_SYMBOL(simple_write_begin); > * > * Use *ONLY* with simple_readpage() > */ > -int simple_write_end(struct file *file, struct address_space *mapping, > +static int simple_write_end(struct file *file, struct address_space *mapping, > loff_t pos, unsigned len, unsigned copied, > struct page *page, void *fsdata) > { > @@ -597,7 +596,17 @@ int simple_write_end(struct file *file, struct address_space *mapping, > > return copied; > } > -EXPORT_SYMBOL(simple_write_end); > + > +/* > + * Provides ramfs-style behavior: data in the pagecache, but no writeback. > + */ > +const struct address_space_operations ram_aops = { > + .readpage = simple_readpage, > + .write_begin = simple_write_begin, > + .write_end = simple_write_end, > + .set_page_dirty = __set_page_dirty_no_writeback, > +}; > +EXPORT_SYMBOL(ram_aops); > > /* > * the inodes created here are not hashed. If you use iunique to generate > diff --git a/fs/ramfs/inode.c b/fs/ramfs/inode.c > index 9ebd17d7befb..65e7e56005b8 100644 > --- a/fs/ramfs/inode.c > +++ b/fs/ramfs/inode.c > @@ -53,13 +53,6 @@ struct ramfs_fs_info { > static const struct super_operations ramfs_ops; > static const struct inode_operations ramfs_dir_inode_operations; > > -static const struct address_space_operations ramfs_aops = { > - .readpage = simple_readpage, > - .write_begin = simple_write_begin, > - .write_end = simple_write_end, > - .set_page_dirty = __set_page_dirty_no_writeback, > -}; > - > struct inode *ramfs_get_inode(struct super_block *sb, > const struct inode *dir, umode_t mode, dev_t dev) > { > @@ -68,7 +61,7 @@ struct inode *ramfs_get_inode(struct super_block *sb, > if (inode) { > inode->i_ino = get_next_ino(); > inode_init_owner(&init_user_ns, inode, dir, mode); > - inode->i_mapping->a_ops = &ramfs_aops; > + inode->i_mapping->a_ops = &ram_aops; > mapping_set_gfp_mask(inode->i_mapping, GFP_HIGHUSER); > mapping_set_unevictable(inode->i_mapping); > inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode); > diff --git a/include/linux/fs.h b/include/linux/fs.h > index c3c88fdb9b2a..869909345420 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -3422,13 +3422,10 @@ extern void noop_invalidatepage(struct page *page, unsigned int offset, > unsigned int length); > extern ssize_t noop_direct_IO(struct kiocb *iocb, struct iov_iter *iter); > extern int simple_empty(struct dentry *); > -extern int simple_readpage(struct file *file, struct page *page); > extern int simple_write_begin(struct file *file, struct address_space *mapping, > loff_t pos, unsigned len, unsigned flags, > struct page **pagep, void **fsdata); > -extern int simple_write_end(struct file *file, struct address_space *mapping, > - loff_t pos, unsigned len, unsigned copied, > - struct page *page, void *fsdata); > +extern const struct address_space_operations ram_aops; > extern int always_delete_dentry(const struct dentry *); > extern struct inode *alloc_anon_inode(struct super_block *); > extern int simple_nosetlease(struct file *, long, struct file_lock **, void **); > -- > 2.30.2 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR