diff options
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r-- | fs/f2fs/node.c | 13 |
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); |
571 | cache: | 572 | cache: |
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 | } |