mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 06:40:54 +07:00
f2fs: fix to mark the checkpointed nat entry correctly
The nat cache entry maintains a status whether it is checkpointed or not. So, if a new cache entry is loaded from the last checkpoint, nat_entry->checkpointed should be true. If the cache entry is modified as being dirty, nat_entry->checkpoint should be false. Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This commit is contained in:
parent
6437d1b0ad
commit
fffc2a00fc
@ -128,6 +128,7 @@ static struct nat_entry *grab_nat_entry(struct f2fs_nm_info *nm_i, nid_t nid)
|
||||
}
|
||||
memset(new, 0, sizeof(struct nat_entry));
|
||||
nat_set_nid(new, nid);
|
||||
new->checkpointed = true;
|
||||
list_add_tail(&new->list, &nm_i->nat_entries);
|
||||
nm_i->nat_cnt++;
|
||||
return new;
|
||||
@ -149,7 +150,6 @@ static void cache_nat_entry(struct f2fs_nm_info *nm_i, nid_t nid,
|
||||
nat_set_blkaddr(e, le32_to_cpu(ne->block_addr));
|
||||
nat_set_ino(e, le32_to_cpu(ne->ino));
|
||||
nat_set_version(e, ne->version);
|
||||
e->checkpointed = true;
|
||||
}
|
||||
write_unlock(&nm_i->nat_tree_lock);
|
||||
}
|
||||
@ -169,7 +169,6 @@ static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni,
|
||||
goto retry;
|
||||
}
|
||||
e->ni = *ni;
|
||||
e->checkpointed = true;
|
||||
f2fs_bug_on(ni->blk_addr == NEW_ADDR);
|
||||
} else if (new_blkaddr == NEW_ADDR) {
|
||||
/*
|
||||
@ -181,9 +180,6 @@ static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni,
|
||||
f2fs_bug_on(ni->blk_addr != NULL_ADDR);
|
||||
}
|
||||
|
||||
if (new_blkaddr == NEW_ADDR)
|
||||
e->checkpointed = false;
|
||||
|
||||
/* sanity check */
|
||||
f2fs_bug_on(nat_get_blkaddr(e) != ni->blk_addr);
|
||||
f2fs_bug_on(nat_get_blkaddr(e) == NULL_ADDR &&
|
||||
@ -1787,7 +1783,6 @@ void flush_nat_entries(struct f2fs_sb_info *sbi)
|
||||
} else {
|
||||
write_lock(&nm_i->nat_tree_lock);
|
||||
__clear_nat_cache_dirty(nm_i, ne);
|
||||
ne->checkpointed = true;
|
||||
write_unlock(&nm_i->nat_tree_lock);
|
||||
}
|
||||
}
|
||||
|
@ -58,9 +58,15 @@ struct nat_entry {
|
||||
#define nat_set_version(nat, v) (nat->ni.version = v)
|
||||
|
||||
#define __set_nat_cache_dirty(nm_i, ne) \
|
||||
list_move_tail(&ne->list, &nm_i->dirty_nat_entries);
|
||||
do { \
|
||||
ne->checkpointed = false; \
|
||||
list_move_tail(&ne->list, &nm_i->dirty_nat_entries); \
|
||||
} while (0);
|
||||
#define __clear_nat_cache_dirty(nm_i, ne) \
|
||||
list_move_tail(&ne->list, &nm_i->nat_entries);
|
||||
do { \
|
||||
ne->checkpointed = true; \
|
||||
list_move_tail(&ne->list, &nm_i->nat_entries); \
|
||||
} while (0);
|
||||
#define inc_node_version(version) (++version)
|
||||
|
||||
static inline void node_info_from_raw_nat(struct node_info *ni,
|
||||
|
Loading…
Reference in New Issue
Block a user