From 200b0700420a78c3ade543761f0901985f41f96b Mon Sep 17 00:00:00 2001 From: Boaz Harrosh Date: Mon, 22 Mar 2010 11:23:40 +0200 Subject: exofs: Add default address_space_operations All vectors of address_space_operations should be initialized by the filesystem. Add the missing parts. This is actually an optimization, by using __set_page_dirty_nobuffers. The default, in case of NULL, would be __set_page_dirty_buffers which has these extar if(s). .releasepage && .invalidatepage should both not be called because page_private() is NULL in exofs. Put a WARN_ON if they are called, to indicate the Kernel has changed in this regard, if when it does. Signed-off-by: Boaz Harrosh --- fs/exofs/inode.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'fs/exofs/inode.c') diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index 76d2a79ef93e..9507283be3ad 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c @@ -755,6 +755,21 @@ static int exofs_write_end(struct file *file, struct address_space *mapping, return ret; } +static int exofs_releasepage(struct page *page, gfp_t gfp) +{ + EXOFS_DBGMSG("page 0x%lx\n", page->index); + WARN_ON(1); + return try_to_free_buffers(page); +} + +static void exofs_invalidatepage(struct page *page, unsigned long offset) +{ + EXOFS_DBGMSG("page_has_buffers=>%d\n", page_has_buffers(page)); + WARN_ON(1); + + block_invalidatepage(page, offset); +} + const struct address_space_operations exofs_aops = { .readpage = exofs_readpage, .readpages = exofs_readpages, @@ -762,6 +777,21 @@ const struct address_space_operations exofs_aops = { .writepages = exofs_writepages, .write_begin = exofs_write_begin_export, .write_end = exofs_write_end, + .releasepage = exofs_releasepage, + .set_page_dirty = __set_page_dirty_nobuffers, + .invalidatepage = exofs_invalidatepage, + + /* Not implemented Yet */ + .bmap = NULL, /* TODO: use osd's OSD_ACT_READ_MAP */ + .direct_IO = NULL, /* TODO: Should be trivial to do */ + + /* With these NULL has special meaning or default is not exported */ + .sync_page = NULL, + .get_xip_mem = NULL, + .migratepage = NULL, + .launder_page = NULL, + .is_partially_uptodate = NULL, + .error_remove_page = NULL, }; /****************************************************************************** -- cgit v1.2.3 From e00117f14f68d9e54c8aa3d52ebdc76cdbbc4f87 Mon Sep 17 00:00:00 2001 From: Dmitry Monakhov Date: Thu, 4 Mar 2010 17:31:48 +0300 Subject: exofs: replace inode uid,gid,mode initialization with helper function Ack-by: Boaz Harrosh Signed-off-by: Dmitry Monakhov Signed-off-by: Al Viro --- fs/exofs/inode.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'fs/exofs/inode.c') diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index 76d2a79ef93e..d7c6afa79754 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c @@ -1123,16 +1123,7 @@ struct inode *exofs_new_inode(struct inode *dir, int mode) sbi = sb->s_fs_info; sb->s_dirt = 1; - inode->i_uid = current->cred->fsuid; - if (dir->i_mode & S_ISGID) { - inode->i_gid = dir->i_gid; - if (S_ISDIR(mode)) - mode |= S_ISGID; - } else { - inode->i_gid = current->cred->fsgid; - } - inode->i_mode = mode; - + inode_init_owner(inode, dir, mode); inode->i_ino = sbi->s_nextid++; inode->i_blkbits = EXOFS_BLKSHIFT; inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; -- cgit v1.2.3