aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChao Yu <chao2.yu@samsung.com>2015-02-05 04:44:29 -0500
committerJaegeuk Kim <jaegeuk@kernel.org>2015-02-11 20:04:44 -0500
commit487261f39bcd8983f55c611e299f70f34659674b (patch)
treece3b804b5fe36470bfc782e707b9215c7e5e13ea
parentd24bdcbfc694026b5cc283cddf47e38f5a7b685d (diff)
f2fs: merge {invalidate,release}page for meta/node/data pages
This patch merges ->{invalidate,release}page function for meta/node/data pages. After this, duplication of codes could be removed. Signed-off-by: Chao Yu <chao2.yu@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fs/f2fs/checkpoint.c24
-rw-r--r--fs/f2fs/data.c24
-rw-r--r--fs/f2fs/f2fs.h2
-rw-r--r--fs/f2fs/node.c23
4 files changed, 22 insertions, 51 deletions
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 470fa58606b2..31a715b5fd5c 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -309,32 +309,12 @@ static int f2fs_set_meta_page_dirty(struct page *page)
309 return 0; 309 return 0;
310} 310}
311 311
312static void f2fs_invalidate_meta_page(struct page *page, unsigned int offset,
313 unsigned int length)
314{
315 struct inode *inode = page->mapping->host;
316
317 if (PageDirty(page))
318 dec_page_count(F2FS_I_SB(inode), F2FS_DIRTY_META);
319 ClearPagePrivate(page);
320}
321
322static int f2fs_release_meta_page(struct page *page, gfp_t wait)
323{
324 /* If this is dirty page, keep PagePrivate */
325 if (PageDirty(page))
326 return 0;
327
328 ClearPagePrivate(page);
329 return 1;
330}
331
332const struct address_space_operations f2fs_meta_aops = { 312const struct address_space_operations f2fs_meta_aops = {
333 .writepage = f2fs_write_meta_page, 313 .writepage = f2fs_write_meta_page,
334 .writepages = f2fs_write_meta_pages, 314 .writepages = f2fs_write_meta_pages,
335 .set_page_dirty = f2fs_set_meta_page_dirty, 315 .set_page_dirty = f2fs_set_meta_page_dirty,
336 .invalidatepage = f2fs_invalidate_meta_page, 316 .invalidatepage = f2fs_invalidate_page,
337 .releasepage = f2fs_release_meta_page, 317 .releasepage = f2fs_release_page,
338}; 318};
339 319
340static void __add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type) 320static void __add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 27dc3fd9fb60..d166557ca867 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1115,20 +1115,28 @@ static ssize_t f2fs_direct_IO(int rw, struct kiocb *iocb,
1115 return err; 1115 return err;
1116} 1116}
1117 1117
1118static void f2fs_invalidate_data_page(struct page *page, unsigned int offset, 1118void f2fs_invalidate_page(struct page *page, unsigned int offset,
1119 unsigned int length) 1119 unsigned int length)
1120{ 1120{
1121 struct inode *inode = page->mapping->host; 1121 struct inode *inode = page->mapping->host;
1122 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1122 1123
1123 if (offset % PAGE_CACHE_SIZE || length != PAGE_CACHE_SIZE) 1124 if (inode->i_ino >= F2FS_ROOT_INO(sbi) &&
1125 (offset % PAGE_CACHE_SIZE || length != PAGE_CACHE_SIZE))
1124 return; 1126 return;
1125 1127
1126 if (PageDirty(page)) 1128 if (PageDirty(page)) {
1127 inode_dec_dirty_pages(inode); 1129 if (inode->i_ino == F2FS_META_INO(sbi))
1130 dec_page_count(sbi, F2FS_DIRTY_META);
1131 else if (inode->i_ino == F2FS_NODE_INO(sbi))
1132 dec_page_count(sbi, F2FS_DIRTY_NODES);
1133 else
1134 inode_dec_dirty_pages(inode);
1135 }
1128 ClearPagePrivate(page); 1136 ClearPagePrivate(page);
1129} 1137}
1130 1138
1131static int f2fs_release_data_page(struct page *page, gfp_t wait) 1139int f2fs_release_page(struct page *page, gfp_t wait)
1132{ 1140{
1133 /* If this is dirty page, keep PagePrivate */ 1141 /* If this is dirty page, keep PagePrivate */
1134 if (PageDirty(page)) 1142 if (PageDirty(page))
@@ -1183,8 +1191,8 @@ const struct address_space_operations f2fs_dblock_aops = {
1183 .write_begin = f2fs_write_begin, 1191 .write_begin = f2fs_write_begin,
1184 .write_end = f2fs_write_end, 1192 .write_end = f2fs_write_end,
1185 .set_page_dirty = f2fs_set_data_page_dirty, 1193 .set_page_dirty = f2fs_set_data_page_dirty,
1186 .invalidatepage = f2fs_invalidate_data_page, 1194 .invalidatepage = f2fs_invalidate_page,
1187 .releasepage = f2fs_release_data_page, 1195 .releasepage = f2fs_release_page,
1188 .direct_IO = f2fs_direct_IO, 1196 .direct_IO = f2fs_direct_IO,
1189 .bmap = f2fs_bmap, 1197 .bmap = f2fs_bmap,
1190}; 1198};
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 964c240c287f..db1ff55de0bc 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1520,6 +1520,8 @@ struct page *get_lock_data_page(struct inode *, pgoff_t);
1520struct page *get_new_data_page(struct inode *, struct page *, pgoff_t, bool); 1520struct page *get_new_data_page(struct inode *, struct page *, pgoff_t, bool);
1521int do_write_data_page(struct page *, struct f2fs_io_info *); 1521int do_write_data_page(struct page *, struct f2fs_io_info *);
1522int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *, u64, u64); 1522int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *, u64, u64);
1523void f2fs_invalidate_page(struct page *, unsigned int, unsigned int);
1524int f2fs_release_page(struct page *, gfp_t);
1523 1525
1524/* 1526/*
1525 * gc.c 1527 * gc.c
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 9feda386ed80..ea22c3210c8a 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1370,25 +1370,6 @@ static int f2fs_set_node_page_dirty(struct page *page)
1370 return 0; 1370 return 0;
1371} 1371}
1372 1372
1373static void f2fs_invalidate_node_page(struct page *page, unsigned int offset,
1374 unsigned int length)
1375{
1376 struct inode *inode = page->mapping->host;
1377 if (PageDirty(page))
1378 dec_page_count(F2FS_I_SB(inode), F2FS_DIRTY_NODES);
1379 ClearPagePrivate(page);
1380}
1381
1382static int f2fs_release_node_page(struct page *page, gfp_t wait)
1383{
1384 /* If this is dirty page, keep PagePrivate */
1385 if (PageDirty(page))
1386 return 0;
1387
1388 ClearPagePrivate(page);
1389 return 1;
1390}
1391
1392/* 1373/*
1393 * Structure of the f2fs node operations 1374 * Structure of the f2fs node operations
1394 */ 1375 */
@@ -1396,8 +1377,8 @@ const struct address_space_operations f2fs_node_aops = {
1396 .writepage = f2fs_write_node_page, 1377 .writepage = f2fs_write_node_page,
1397 .writepages = f2fs_write_node_pages, 1378 .writepages = f2fs_write_node_pages,
1398 .set_page_dirty = f2fs_set_node_page_dirty, 1379 .set_page_dirty = f2fs_set_node_page_dirty,
1399 .invalidatepage = f2fs_invalidate_node_page, 1380 .invalidatepage = f2fs_invalidate_page,
1400 .releasepage = f2fs_release_node_page, 1381 .releasepage = f2fs_release_page,
1401}; 1382};
1402 1383
1403static struct free_nid *__lookup_free_nid_list(struct f2fs_nm_info *nm_i, 1384static struct free_nid *__lookup_free_nid_list(struct f2fs_nm_info *nm_i,