mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-21 08:53:41 +00: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));
|
memset(new, 0, sizeof(struct nat_entry));
|
||||||
nat_set_nid(new, nid);
|
nat_set_nid(new, nid);
|
||||||
|
new->checkpointed = true;
|
||||||
list_add_tail(&new->list, &nm_i->nat_entries);
|
list_add_tail(&new->list, &nm_i->nat_entries);
|
||||||
nm_i->nat_cnt++;
|
nm_i->nat_cnt++;
|
||||||
return new;
|
return new;
|
||||||
@ -149,7 +150,6 @@ retry:
|
|||||||
nat_set_blkaddr(e, le32_to_cpu(ne->block_addr));
|
nat_set_blkaddr(e, le32_to_cpu(ne->block_addr));
|
||||||
nat_set_ino(e, le32_to_cpu(ne->ino));
|
nat_set_ino(e, le32_to_cpu(ne->ino));
|
||||||
nat_set_version(e, ne->version);
|
nat_set_version(e, ne->version);
|
||||||
e->checkpointed = true;
|
|
||||||
}
|
}
|
||||||
write_unlock(&nm_i->nat_tree_lock);
|
write_unlock(&nm_i->nat_tree_lock);
|
||||||
}
|
}
|
||||||
@ -169,7 +169,6 @@ retry:
|
|||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
e->ni = *ni;
|
e->ni = *ni;
|
||||||
e->checkpointed = true;
|
|
||||||
f2fs_bug_on(ni->blk_addr == NEW_ADDR);
|
f2fs_bug_on(ni->blk_addr == NEW_ADDR);
|
||||||
} else if (new_blkaddr == NEW_ADDR) {
|
} else if (new_blkaddr == NEW_ADDR) {
|
||||||
/*
|
/*
|
||||||
@ -181,9 +180,6 @@ retry:
|
|||||||
f2fs_bug_on(ni->blk_addr != NULL_ADDR);
|
f2fs_bug_on(ni->blk_addr != NULL_ADDR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_blkaddr == NEW_ADDR)
|
|
||||||
e->checkpointed = false;
|
|
||||||
|
|
||||||
/* sanity check */
|
/* sanity check */
|
||||||
f2fs_bug_on(nat_get_blkaddr(e) != ni->blk_addr);
|
f2fs_bug_on(nat_get_blkaddr(e) != ni->blk_addr);
|
||||||
f2fs_bug_on(nat_get_blkaddr(e) == NULL_ADDR &&
|
f2fs_bug_on(nat_get_blkaddr(e) == NULL_ADDR &&
|
||||||
@ -1787,7 +1783,6 @@ flush_now:
|
|||||||
} else {
|
} else {
|
||||||
write_lock(&nm_i->nat_tree_lock);
|
write_lock(&nm_i->nat_tree_lock);
|
||||||
__clear_nat_cache_dirty(nm_i, ne);
|
__clear_nat_cache_dirty(nm_i, ne);
|
||||||
ne->checkpointed = true;
|
|
||||||
write_unlock(&nm_i->nat_tree_lock);
|
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 nat_set_version(nat, v) (nat->ni.version = v)
|
||||||
|
|
||||||
#define __set_nat_cache_dirty(nm_i, ne) \
|
#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) \
|
#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)
|
#define inc_node_version(version) (++version)
|
||||||
|
|
||||||
static inline void node_info_from_raw_nat(struct node_info *ni,
|
static inline void node_info_from_raw_nat(struct node_info *ni,
|
||||||
|
Loading…
Reference in New Issue
Block a user