summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r--fs/f2fs/node.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 057362a821a0..a6960b47f394 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -454,7 +454,7 @@ static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni,
454 new_blkaddr == NULL_ADDR); 454 new_blkaddr == NULL_ADDR);
455 f2fs_bug_on(sbi, nat_get_blkaddr(e) == NEW_ADDR && 455 f2fs_bug_on(sbi, nat_get_blkaddr(e) == NEW_ADDR &&
456 new_blkaddr == NEW_ADDR); 456 new_blkaddr == NEW_ADDR);
457 f2fs_bug_on(sbi, is_valid_data_blkaddr(sbi, nat_get_blkaddr(e)) && 457 f2fs_bug_on(sbi, __is_valid_data_blkaddr(nat_get_blkaddr(e)) &&
458 new_blkaddr == NEW_ADDR); 458 new_blkaddr == NEW_ADDR);
459 459
460 /* increment version no as node is removed */ 460 /* increment version no as node is removed */
@@ -465,7 +465,7 @@ static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni,
465 465
466 /* change address */ 466 /* change address */
467 nat_set_blkaddr(e, new_blkaddr); 467 nat_set_blkaddr(e, new_blkaddr);
468 if (!is_valid_data_blkaddr(sbi, new_blkaddr)) 468 if (!__is_valid_data_blkaddr(new_blkaddr))
469 set_nat_flag(e, IS_CHECKPOINTED, false); 469 set_nat_flag(e, IS_CHECKPOINTED, false);
470 __set_nat_cache_dirty(nm_i, e); 470 __set_nat_cache_dirty(nm_i, e);
471 471
@@ -526,6 +526,7 @@ int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
526 struct f2fs_nat_entry ne; 526 struct f2fs_nat_entry ne;
527 struct nat_entry *e; 527 struct nat_entry *e;
528 pgoff_t index; 528 pgoff_t index;
529 block_t blkaddr;
529 int i; 530 int i;
530 531
531 ni->nid = nid; 532 ni->nid = nid;
@@ -569,6 +570,11 @@ int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
569 node_info_from_raw_nat(ni, &ne); 570 node_info_from_raw_nat(ni, &ne);
570 f2fs_put_page(page, 1); 571 f2fs_put_page(page, 1);
571cache: 572cache:
573 blkaddr = le32_to_cpu(ne.block_addr);
574 if (__is_valid_data_blkaddr(blkaddr) &&
575 !f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC_ENHANCE))
576 return -EFAULT;
577
572 /* cache nat entry */ 578 /* cache nat entry */
573 cache_nat_entry(sbi, nid, &ne); 579 cache_nat_entry(sbi, nid, &ne);
574 return 0; 580 return 0;
@@ -1548,7 +1554,8 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
1548 } 1554 }
1549 1555
1550 if (__is_valid_data_blkaddr(ni.blk_addr) && 1556 if (__is_valid_data_blkaddr(ni.blk_addr) &&
1551 !f2fs_is_valid_blkaddr(sbi, ni.blk_addr, DATA_GENERIC)) { 1557 !f2fs_is_valid_blkaddr(sbi, ni.blk_addr,
1558 DATA_GENERIC_ENHANCE)) {
1552 up_read(&sbi->node_write); 1559 up_read(&sbi->node_write);
1553 goto redirty_out; 1560 goto redirty_out;
1554 } 1561 }