diff options
author | Chao Yu <chao2.yu@samsung.com> | 2015-02-05 04:44:29 -0500 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2015-02-11 20:04:44 -0500 |
commit | 487261f39bcd8983f55c611e299f70f34659674b (patch) | |
tree | ce3b804b5fe36470bfc782e707b9215c7e5e13ea | |
parent | d24bdcbfc694026b5cc283cddf47e38f5a7b685d (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.c | 24 | ||||
-rw-r--r-- | fs/f2fs/data.c | 24 | ||||
-rw-r--r-- | fs/f2fs/f2fs.h | 2 | ||||
-rw-r--r-- | fs/f2fs/node.c | 23 |
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 | ||
312 | static 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 | |||
322 | static 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 | |||
332 | const struct address_space_operations f2fs_meta_aops = { | 312 | const 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 | ||
340 | static void __add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type) | 320 | static 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 | ||
1118 | static void f2fs_invalidate_data_page(struct page *page, unsigned int offset, | 1118 | void 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 | ||
1131 | static int f2fs_release_data_page(struct page *page, gfp_t wait) | 1139 | int 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); | |||
1520 | struct page *get_new_data_page(struct inode *, struct page *, pgoff_t, bool); | 1520 | struct page *get_new_data_page(struct inode *, struct page *, pgoff_t, bool); |
1521 | int do_write_data_page(struct page *, struct f2fs_io_info *); | 1521 | int do_write_data_page(struct page *, struct f2fs_io_info *); |
1522 | int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *, u64, u64); | 1522 | int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *, u64, u64); |
1523 | void f2fs_invalidate_page(struct page *, unsigned int, unsigned int); | ||
1524 | int 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 | ||
1373 | static 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 | |||
1382 | static 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 | ||
1403 | static struct free_nid *__lookup_free_nid_list(struct f2fs_nm_info *nm_i, | 1384 | static struct free_nid *__lookup_free_nid_list(struct f2fs_nm_info *nm_i, |