|
@@ -23,7 +23,7 @@
|
|
|
#include "trace.h"
|
|
|
#include <trace/events/f2fs.h>
|
|
|
|
|
|
-#define on_build_free_nids(nmi) mutex_is_locked(&(nm_i)->build_lock)
|
|
|
+#define on_f2fs_build_free_nids(nmi) mutex_is_locked(&(nm_i)->build_lock)
|
|
|
|
|
|
static struct kmem_cache *nat_entry_slab;
|
|
|
static struct kmem_cache *free_nid_slab;
|
|
@@ -32,7 +32,7 @@ static struct kmem_cache *nat_entry_set_slab;
|
|
|
/*
|
|
|
* Check whether the given nid is within node id range.
|
|
|
*/
|
|
|
-int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
+int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
{
|
|
|
if (unlikely(nid < F2FS_ROOT_INO(sbi) || nid >= NM_I(sbi)->max_nid)) {
|
|
|
set_sbi_flag(sbi, SBI_NEED_FSCK);
|
|
@@ -44,7 +44,7 @@ int check_nid_range(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-bool available_free_memory(struct f2fs_sb_info *sbi, int type)
|
|
|
+bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct sysinfo val;
|
|
@@ -103,7 +103,7 @@ bool available_free_memory(struct f2fs_sb_info *sbi, int type)
|
|
|
static void clear_node_page_dirty(struct page *page)
|
|
|
{
|
|
|
if (PageDirty(page)) {
|
|
|
- clear_radix_tree_dirty_tag(page);
|
|
|
+ f2fs_clear_radix_tree_dirty_tag(page);
|
|
|
clear_page_dirty_for_io(page);
|
|
|
dec_page_count(F2FS_P_SB(page), F2FS_DIRTY_NODES);
|
|
|
}
|
|
@@ -113,7 +113,7 @@ static void clear_node_page_dirty(struct page *page)
|
|
|
static struct page *get_current_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
{
|
|
|
pgoff_t index = current_nat_addr(sbi, nid);
|
|
|
- return get_meta_page(sbi, index);
|
|
|
+ return f2fs_get_meta_page(sbi, index);
|
|
|
}
|
|
|
|
|
|
static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
|
|
@@ -130,8 +130,8 @@ static struct page *get_next_nat_page(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
dst_off = next_nat_addr(sbi, src_off);
|
|
|
|
|
|
/* get current nat block page with lock */
|
|
|
- src_page = get_meta_page(sbi, src_off);
|
|
|
- dst_page = grab_meta_page(sbi, dst_off);
|
|
|
+ src_page = f2fs_get_meta_page(sbi, src_off);
|
|
|
+ dst_page = f2fs_grab_meta_page(sbi, dst_off);
|
|
|
f2fs_bug_on(sbi, PageDirty(src_page));
|
|
|
|
|
|
src_addr = page_address(src_page);
|
|
@@ -267,7 +267,7 @@ static unsigned int __gang_lookup_nat_set(struct f2fs_nm_info *nm_i,
|
|
|
start, nr);
|
|
|
}
|
|
|
|
|
|
-int need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
+int f2fs_need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct nat_entry *e;
|
|
@@ -284,7 +284,7 @@ int need_dentry_mark(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
return need;
|
|
|
}
|
|
|
|
|
|
-bool is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
+bool f2fs_is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct nat_entry *e;
|
|
@@ -298,7 +298,7 @@ bool is_checkpointed_node(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
return is_cp;
|
|
|
}
|
|
|
|
|
|
-bool need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino)
|
|
|
+bool f2fs_need_inode_block_update(struct f2fs_sb_info *sbi, nid_t ino)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct nat_entry *e;
|
|
@@ -397,7 +397,7 @@ static void set_node_addr(struct f2fs_sb_info *sbi, struct node_info *ni,
|
|
|
up_write(&nm_i->nat_tree_lock);
|
|
|
}
|
|
|
|
|
|
-int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink)
|
|
|
+int f2fs_try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
int nr = nr_shrink;
|
|
@@ -419,7 +419,8 @@ int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink)
|
|
|
/*
|
|
|
* This function always returns success
|
|
|
*/
|
|
|
-void get_node_info(struct f2fs_sb_info *sbi, nid_t nid, struct node_info *ni)
|
|
|
+void f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
|
|
|
+ struct node_info *ni)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA);
|
|
@@ -449,7 +450,7 @@ void get_node_info(struct f2fs_sb_info *sbi, nid_t nid, struct node_info *ni)
|
|
|
|
|
|
/* Check current segment summary */
|
|
|
down_read(&curseg->journal_rwsem);
|
|
|
- i = lookup_journal_in_cursum(journal, NAT_JOURNAL, nid, 0);
|
|
|
+ i = f2fs_lookup_journal_in_cursum(journal, NAT_JOURNAL, nid, 0);
|
|
|
if (i >= 0) {
|
|
|
ne = nat_in_journal(journal, i);
|
|
|
node_info_from_raw_nat(ni, &ne);
|
|
@@ -464,7 +465,7 @@ void get_node_info(struct f2fs_sb_info *sbi, nid_t nid, struct node_info *ni)
|
|
|
index = current_nat_addr(sbi, nid);
|
|
|
up_read(&nm_i->nat_tree_lock);
|
|
|
|
|
|
- page = get_meta_page(sbi, index);
|
|
|
+ page = f2fs_get_meta_page(sbi, index);
|
|
|
nat_blk = (struct f2fs_nat_block *)page_address(page);
|
|
|
ne = nat_blk->entries[nid - start_nid];
|
|
|
node_info_from_raw_nat(ni, &ne);
|
|
@@ -477,7 +478,7 @@ cache:
|
|
|
/*
|
|
|
* readahead MAX_RA_NODE number of node pages.
|
|
|
*/
|
|
|
-static void ra_node_pages(struct page *parent, int start, int n)
|
|
|
+static void f2fs_ra_node_pages(struct page *parent, int start, int n)
|
|
|
{
|
|
|
struct f2fs_sb_info *sbi = F2FS_P_SB(parent);
|
|
|
struct blk_plug plug;
|
|
@@ -491,13 +492,13 @@ static void ra_node_pages(struct page *parent, int start, int n)
|
|
|
end = min(end, NIDS_PER_BLOCK);
|
|
|
for (i = start; i < end; i++) {
|
|
|
nid = get_nid(parent, i, false);
|
|
|
- ra_node_page(sbi, nid);
|
|
|
+ f2fs_ra_node_page(sbi, nid);
|
|
|
}
|
|
|
|
|
|
blk_finish_plug(&plug);
|
|
|
}
|
|
|
|
|
|
-pgoff_t get_next_page_offset(struct dnode_of_data *dn, pgoff_t pgofs)
|
|
|
+pgoff_t f2fs_get_next_page_offset(struct dnode_of_data *dn, pgoff_t pgofs)
|
|
|
{
|
|
|
const long direct_index = ADDRS_PER_INODE(dn->inode);
|
|
|
const long direct_blks = ADDRS_PER_BLOCK;
|
|
@@ -612,7 +613,7 @@ got:
|
|
|
* f2fs_unlock_op() only if ro is not set RDONLY_NODE.
|
|
|
* In the case of RDONLY_NODE, we don't need to care about mutex.
|
|
|
*/
|
|
|
-int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
|
|
|
+int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
|
|
|
{
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
|
|
|
struct page *npage[4];
|
|
@@ -631,7 +632,7 @@ int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
|
|
|
npage[0] = dn->inode_page;
|
|
|
|
|
|
if (!npage[0]) {
|
|
|
- npage[0] = get_node_page(sbi, nids[0]);
|
|
|
+ npage[0] = f2fs_get_node_page(sbi, nids[0]);
|
|
|
if (IS_ERR(npage[0]))
|
|
|
return PTR_ERR(npage[0]);
|
|
|
}
|
|
@@ -655,24 +656,24 @@ int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
|
|
|
|
|
|
if (!nids[i] && mode == ALLOC_NODE) {
|
|
|
/* alloc new node */
|
|
|
- if (!alloc_nid(sbi, &(nids[i]))) {
|
|
|
+ if (!f2fs_alloc_nid(sbi, &(nids[i]))) {
|
|
|
err = -ENOSPC;
|
|
|
goto release_pages;
|
|
|
}
|
|
|
|
|
|
dn->nid = nids[i];
|
|
|
- npage[i] = new_node_page(dn, noffset[i]);
|
|
|
+ npage[i] = f2fs_new_node_page(dn, noffset[i]);
|
|
|
if (IS_ERR(npage[i])) {
|
|
|
- alloc_nid_failed(sbi, nids[i]);
|
|
|
+ f2fs_alloc_nid_failed(sbi, nids[i]);
|
|
|
err = PTR_ERR(npage[i]);
|
|
|
goto release_pages;
|
|
|
}
|
|
|
|
|
|
set_nid(parent, offset[i - 1], nids[i], i == 1);
|
|
|
- alloc_nid_done(sbi, nids[i]);
|
|
|
+ f2fs_alloc_nid_done(sbi, nids[i]);
|
|
|
done = true;
|
|
|
} else if (mode == LOOKUP_NODE_RA && i == level && level > 1) {
|
|
|
- npage[i] = get_node_page_ra(parent, offset[i - 1]);
|
|
|
+ npage[i] = f2fs_get_node_page_ra(parent, offset[i - 1]);
|
|
|
if (IS_ERR(npage[i])) {
|
|
|
err = PTR_ERR(npage[i]);
|
|
|
goto release_pages;
|
|
@@ -687,7 +688,7 @@ int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
|
|
|
}
|
|
|
|
|
|
if (!done) {
|
|
|
- npage[i] = get_node_page(sbi, nids[i]);
|
|
|
+ npage[i] = f2fs_get_node_page(sbi, nids[i]);
|
|
|
if (IS_ERR(npage[i])) {
|
|
|
err = PTR_ERR(npage[i]);
|
|
|
f2fs_put_page(npage[0], 0);
|
|
@@ -726,15 +727,15 @@ static void truncate_node(struct dnode_of_data *dn)
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
|
|
|
struct node_info ni;
|
|
|
|
|
|
- get_node_info(sbi, dn->nid, &ni);
|
|
|
+ f2fs_get_node_info(sbi, dn->nid, &ni);
|
|
|
|
|
|
/* Deallocate node address */
|
|
|
- invalidate_blocks(sbi, ni.blk_addr);
|
|
|
+ f2fs_invalidate_blocks(sbi, ni.blk_addr);
|
|
|
dec_valid_node_count(sbi, dn->inode, dn->nid == dn->inode->i_ino);
|
|
|
set_node_addr(sbi, &ni, NULL_ADDR, false);
|
|
|
|
|
|
if (dn->nid == dn->inode->i_ino) {
|
|
|
- remove_orphan_inode(sbi, dn->nid);
|
|
|
+ f2fs_remove_orphan_inode(sbi, dn->nid);
|
|
|
dec_valid_inode_count(sbi);
|
|
|
f2fs_inode_synced(dn->inode);
|
|
|
}
|
|
@@ -759,7 +760,7 @@ static int truncate_dnode(struct dnode_of_data *dn)
|
|
|
return 1;
|
|
|
|
|
|
/* get direct node */
|
|
|
- page = get_node_page(F2FS_I_SB(dn->inode), dn->nid);
|
|
|
+ page = f2fs_get_node_page(F2FS_I_SB(dn->inode), dn->nid);
|
|
|
if (IS_ERR(page) && PTR_ERR(page) == -ENOENT)
|
|
|
return 1;
|
|
|
else if (IS_ERR(page))
|
|
@@ -768,7 +769,7 @@ static int truncate_dnode(struct dnode_of_data *dn)
|
|
|
/* Make dnode_of_data for parameter */
|
|
|
dn->node_page = page;
|
|
|
dn->ofs_in_node = 0;
|
|
|
- truncate_data_blocks(dn);
|
|
|
+ f2fs_truncate_data_blocks(dn);
|
|
|
truncate_node(dn);
|
|
|
return 1;
|
|
|
}
|
|
@@ -789,13 +790,13 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
|
|
|
|
|
|
trace_f2fs_truncate_nodes_enter(dn->inode, dn->nid, dn->data_blkaddr);
|
|
|
|
|
|
- page = get_node_page(F2FS_I_SB(dn->inode), dn->nid);
|
|
|
+ page = f2fs_get_node_page(F2FS_I_SB(dn->inode), dn->nid);
|
|
|
if (IS_ERR(page)) {
|
|
|
trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(page));
|
|
|
return PTR_ERR(page);
|
|
|
}
|
|
|
|
|
|
- ra_node_pages(page, ofs, NIDS_PER_BLOCK);
|
|
|
+ f2fs_ra_node_pages(page, ofs, NIDS_PER_BLOCK);
|
|
|
|
|
|
rn = F2FS_NODE(page);
|
|
|
if (depth < 3) {
|
|
@@ -865,7 +866,7 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
|
|
|
/* get indirect nodes in the path */
|
|
|
for (i = 0; i < idx + 1; i++) {
|
|
|
/* reference count'll be increased */
|
|
|
- pages[i] = get_node_page(F2FS_I_SB(dn->inode), nid[i]);
|
|
|
+ pages[i] = f2fs_get_node_page(F2FS_I_SB(dn->inode), nid[i]);
|
|
|
if (IS_ERR(pages[i])) {
|
|
|
err = PTR_ERR(pages[i]);
|
|
|
idx = i - 1;
|
|
@@ -874,7 +875,7 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
|
|
|
nid[i + 1] = get_nid(pages[i], offset[i + 1], false);
|
|
|
}
|
|
|
|
|
|
- ra_node_pages(pages[idx], offset[idx + 1], NIDS_PER_BLOCK);
|
|
|
+ f2fs_ra_node_pages(pages[idx], offset[idx + 1], NIDS_PER_BLOCK);
|
|
|
|
|
|
/* free direct nodes linked to a partial indirect node */
|
|
|
for (i = offset[idx + 1]; i < NIDS_PER_BLOCK; i++) {
|
|
@@ -911,7 +912,7 @@ fail:
|
|
|
/*
|
|
|
* All the block addresses of data and nodes should be nullified.
|
|
|
*/
|
|
|
-int truncate_inode_blocks(struct inode *inode, pgoff_t from)
|
|
|
+int f2fs_truncate_inode_blocks(struct inode *inode, pgoff_t from)
|
|
|
{
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
|
int err = 0, cont = 1;
|
|
@@ -927,7 +928,7 @@ int truncate_inode_blocks(struct inode *inode, pgoff_t from)
|
|
|
if (level < 0)
|
|
|
return level;
|
|
|
|
|
|
- page = get_node_page(sbi, inode->i_ino);
|
|
|
+ page = f2fs_get_node_page(sbi, inode->i_ino);
|
|
|
if (IS_ERR(page)) {
|
|
|
trace_f2fs_truncate_inode_blocks_exit(inode, PTR_ERR(page));
|
|
|
return PTR_ERR(page);
|
|
@@ -1007,7 +1008,7 @@ fail:
|
|
|
}
|
|
|
|
|
|
/* caller must lock inode page */
|
|
|
-int truncate_xattr_node(struct inode *inode)
|
|
|
+int f2fs_truncate_xattr_node(struct inode *inode)
|
|
|
{
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
|
nid_t nid = F2FS_I(inode)->i_xattr_nid;
|
|
@@ -1017,7 +1018,7 @@ int truncate_xattr_node(struct inode *inode)
|
|
|
if (!nid)
|
|
|
return 0;
|
|
|
|
|
|
- npage = get_node_page(sbi, nid);
|
|
|
+ npage = f2fs_get_node_page(sbi, nid);
|
|
|
if (IS_ERR(npage))
|
|
|
return PTR_ERR(npage);
|
|
|
|
|
@@ -1032,17 +1033,17 @@ int truncate_xattr_node(struct inode *inode)
|
|
|
* Caller should grab and release a rwsem by calling f2fs_lock_op() and
|
|
|
* f2fs_unlock_op().
|
|
|
*/
|
|
|
-int remove_inode_page(struct inode *inode)
|
|
|
+int f2fs_remove_inode_page(struct inode *inode)
|
|
|
{
|
|
|
struct dnode_of_data dn;
|
|
|
int err;
|
|
|
|
|
|
set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino);
|
|
|
- err = get_dnode_of_data(&dn, 0, LOOKUP_NODE);
|
|
|
+ err = f2fs_get_dnode_of_data(&dn, 0, LOOKUP_NODE);
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
- err = truncate_xattr_node(inode);
|
|
|
+ err = f2fs_truncate_xattr_node(inode);
|
|
|
if (err) {
|
|
|
f2fs_put_dnode(&dn);
|
|
|
return err;
|
|
@@ -1051,7 +1052,7 @@ int remove_inode_page(struct inode *inode)
|
|
|
/* remove potential inline_data blocks */
|
|
|
if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
|
|
|
S_ISLNK(inode->i_mode))
|
|
|
- truncate_data_blocks_range(&dn, 1);
|
|
|
+ f2fs_truncate_data_blocks_range(&dn, 1);
|
|
|
|
|
|
/* 0 is possible, after f2fs_new_inode() has failed */
|
|
|
f2fs_bug_on(F2FS_I_SB(inode),
|
|
@@ -1062,7 +1063,7 @@ int remove_inode_page(struct inode *inode)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-struct page *new_inode_page(struct inode *inode)
|
|
|
+struct page *f2fs_new_inode_page(struct inode *inode)
|
|
|
{
|
|
|
struct dnode_of_data dn;
|
|
|
|
|
@@ -1070,10 +1071,10 @@ struct page *new_inode_page(struct inode *inode)
|
|
|
set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino);
|
|
|
|
|
|
/* caller should f2fs_put_page(page, 1); */
|
|
|
- return new_node_page(&dn, 0);
|
|
|
+ return f2fs_new_node_page(&dn, 0);
|
|
|
}
|
|
|
|
|
|
-struct page *new_node_page(struct dnode_of_data *dn, unsigned int ofs)
|
|
|
+struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
|
|
|
{
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
|
|
|
struct node_info new_ni;
|
|
@@ -1091,7 +1092,7 @@ struct page *new_node_page(struct dnode_of_data *dn, unsigned int ofs)
|
|
|
goto fail;
|
|
|
|
|
|
#ifdef CONFIG_F2FS_CHECK_FS
|
|
|
- get_node_info(sbi, dn->nid, &new_ni);
|
|
|
+ f2fs_get_node_info(sbi, dn->nid, &new_ni);
|
|
|
f2fs_bug_on(sbi, new_ni.blk_addr != NULL_ADDR);
|
|
|
#endif
|
|
|
new_ni.nid = dn->nid;
|
|
@@ -1143,7 +1144,7 @@ static int read_node_page(struct page *page, int op_flags)
|
|
|
if (PageUptodate(page))
|
|
|
return LOCKED_PAGE;
|
|
|
|
|
|
- get_node_info(sbi, page->index, &ni);
|
|
|
+ f2fs_get_node_info(sbi, page->index, &ni);
|
|
|
|
|
|
if (unlikely(ni.blk_addr == NULL_ADDR)) {
|
|
|
ClearPageUptodate(page);
|
|
@@ -1157,14 +1158,14 @@ static int read_node_page(struct page *page, int op_flags)
|
|
|
/*
|
|
|
* Readahead a node page
|
|
|
*/
|
|
|
-void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
+void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
{
|
|
|
struct page *apage;
|
|
|
int err;
|
|
|
|
|
|
if (!nid)
|
|
|
return;
|
|
|
- if (check_nid_range(sbi, nid))
|
|
|
+ if (f2fs_check_nid_range(sbi, nid))
|
|
|
return;
|
|
|
|
|
|
rcu_read_lock();
|
|
@@ -1189,7 +1190,7 @@ static struct page *__get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid,
|
|
|
|
|
|
if (!nid)
|
|
|
return ERR_PTR(-ENOENT);
|
|
|
- if (check_nid_range(sbi, nid))
|
|
|
+ if (f2fs_check_nid_range(sbi, nid))
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
repeat:
|
|
|
page = f2fs_grab_cache_page(NODE_MAPPING(sbi), nid, false);
|
|
@@ -1206,7 +1207,7 @@ repeat:
|
|
|
}
|
|
|
|
|
|
if (parent)
|
|
|
- ra_node_pages(parent, start + 1, MAX_RA_NODE);
|
|
|
+ f2fs_ra_node_pages(parent, start + 1, MAX_RA_NODE);
|
|
|
|
|
|
lock_page(page);
|
|
|
|
|
@@ -1240,12 +1241,12 @@ out_err:
|
|
|
return page;
|
|
|
}
|
|
|
|
|
|
-struct page *get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid)
|
|
|
+struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid)
|
|
|
{
|
|
|
return __get_node_page(sbi, nid, NULL, 0);
|
|
|
}
|
|
|
|
|
|
-struct page *get_node_page_ra(struct page *parent, int start)
|
|
|
+struct page *f2fs_get_node_page_ra(struct page *parent, int start)
|
|
|
{
|
|
|
struct f2fs_sb_info *sbi = F2FS_P_SB(parent);
|
|
|
nid_t nid = get_nid(parent, start, false);
|
|
@@ -1280,7 +1281,7 @@ static void flush_inline_data(struct f2fs_sb_info *sbi, nid_t ino)
|
|
|
|
|
|
ret = f2fs_write_inline_data(inode, page);
|
|
|
inode_dec_dirty_pages(inode);
|
|
|
- remove_dirty_inode(inode);
|
|
|
+ f2fs_remove_dirty_inode(inode);
|
|
|
if (ret)
|
|
|
set_page_dirty(page);
|
|
|
page_out:
|
|
@@ -1384,7 +1385,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
|
|
|
down_read(&sbi->node_write);
|
|
|
}
|
|
|
|
|
|
- get_node_info(sbi, nid, &ni);
|
|
|
+ f2fs_get_node_info(sbi, nid, &ni);
|
|
|
|
|
|
/* This page is already truncated */
|
|
|
if (unlikely(ni.blk_addr == NULL_ADDR)) {
|
|
@@ -1401,7 +1402,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
|
|
|
set_page_writeback(page);
|
|
|
ClearPageError(page);
|
|
|
fio.old_blkaddr = ni.blk_addr;
|
|
|
- write_node_page(nid, &fio);
|
|
|
+ f2fs_do_write_node_page(nid, &fio);
|
|
|
set_node_addr(sbi, &ni, fio.new_blkaddr, is_fsync_dnode(page));
|
|
|
dec_page_count(sbi, F2FS_DIRTY_NODES);
|
|
|
up_read(&sbi->node_write);
|
|
@@ -1430,7 +1431,7 @@ redirty_out:
|
|
|
return AOP_WRITEPAGE_ACTIVATE;
|
|
|
}
|
|
|
|
|
|
-void move_node_page(struct page *node_page, int gc_type)
|
|
|
+void f2fs_move_node_page(struct page *node_page, int gc_type)
|
|
|
{
|
|
|
if (gc_type == FG_GC) {
|
|
|
struct writeback_control wbc = {
|
|
@@ -1467,7 +1468,7 @@ static int f2fs_write_node_page(struct page *page,
|
|
|
return __write_node_page(page, false, NULL, wbc, false, FS_NODE_IO);
|
|
|
}
|
|
|
|
|
|
-int fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
|
|
|
+int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
|
|
|
struct writeback_control *wbc, bool atomic)
|
|
|
{
|
|
|
pgoff_t index;
|
|
@@ -1534,9 +1535,9 @@ continue_unlock:
|
|
|
if (IS_INODE(page)) {
|
|
|
if (is_inode_flag_set(inode,
|
|
|
FI_DIRTY_INODE))
|
|
|
- update_inode(inode, page);
|
|
|
+ f2fs_update_inode(inode, page);
|
|
|
set_dentry_mark(page,
|
|
|
- need_dentry_mark(sbi, ino));
|
|
|
+ f2fs_need_dentry_mark(sbi, ino));
|
|
|
}
|
|
|
/* may be written by other thread */
|
|
|
if (!PageDirty(page))
|
|
@@ -1586,7 +1587,8 @@ out:
|
|
|
return ret ? -EIO: 0;
|
|
|
}
|
|
|
|
|
|
-int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc,
|
|
|
+int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
|
|
|
+ struct writeback_control *wbc,
|
|
|
bool do_balance, enum iostat_type io_type)
|
|
|
{
|
|
|
pgoff_t index;
|
|
@@ -1687,7 +1689,7 @@ continue_unlock:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-int wait_on_node_pages_writeback(struct f2fs_sb_info *sbi, nid_t ino)
|
|
|
+int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi, nid_t ino)
|
|
|
{
|
|
|
pgoff_t index = 0;
|
|
|
struct pagevec pvec;
|
|
@@ -1741,7 +1743,7 @@ static int f2fs_write_node_pages(struct address_space *mapping,
|
|
|
diff = nr_pages_to_write(sbi, NODE, wbc);
|
|
|
wbc->sync_mode = WB_SYNC_NONE;
|
|
|
blk_start_plug(&plug);
|
|
|
- sync_node_pages(sbi, wbc, true, FS_NODE_IO);
|
|
|
+ f2fs_sync_node_pages(sbi, wbc, true, FS_NODE_IO);
|
|
|
blk_finish_plug(&plug);
|
|
|
wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff);
|
|
|
return 0;
|
|
@@ -1889,20 +1891,20 @@ static bool add_free_nid(struct f2fs_sb_info *sbi,
|
|
|
* Thread A Thread B
|
|
|
* - f2fs_create
|
|
|
* - f2fs_new_inode
|
|
|
- * - alloc_nid
|
|
|
+ * - f2fs_alloc_nid
|
|
|
* - __insert_nid_to_list(PREALLOC_NID)
|
|
|
* - f2fs_balance_fs_bg
|
|
|
- * - build_free_nids
|
|
|
- * - __build_free_nids
|
|
|
+ * - f2fs_build_free_nids
|
|
|
+ * - __f2fs_build_free_nids
|
|
|
* - scan_nat_page
|
|
|
* - add_free_nid
|
|
|
* - __lookup_nat_cache
|
|
|
* - f2fs_add_link
|
|
|
- * - init_inode_metadata
|
|
|
- * - new_inode_page
|
|
|
- * - new_node_page
|
|
|
+ * - f2fs_init_inode_metadata
|
|
|
+ * - f2fs_new_inode_page
|
|
|
+ * - f2fs_new_node_page
|
|
|
* - set_node_addr
|
|
|
- * - alloc_nid_done
|
|
|
+ * - f2fs_alloc_nid_done
|
|
|
* - __remove_nid_from_list(PREALLOC_NID)
|
|
|
* - __insert_nid_to_list(FREE_NID)
|
|
|
*/
|
|
@@ -2034,7 +2036,8 @@ out:
|
|
|
up_read(&nm_i->nat_tree_lock);
|
|
|
}
|
|
|
|
|
|
-static void __build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
|
|
|
+static void __f2fs_build_free_nids(struct f2fs_sb_info *sbi,
|
|
|
+ bool sync, bool mount)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
int i = 0;
|
|
@@ -2047,7 +2050,7 @@ static void __build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
|
|
|
if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK)
|
|
|
return;
|
|
|
|
|
|
- if (!sync && !available_free_memory(sbi, FREE_NIDS))
|
|
|
+ if (!sync && !f2fs_available_free_memory(sbi, FREE_NIDS))
|
|
|
return;
|
|
|
|
|
|
if (!mount) {
|
|
@@ -2059,7 +2062,7 @@ static void __build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
|
|
|
}
|
|
|
|
|
|
/* readahead nat pages to be scanned */
|
|
|
- ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), FREE_NID_PAGES,
|
|
|
+ f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nid), FREE_NID_PAGES,
|
|
|
META_NAT, true);
|
|
|
|
|
|
down_read(&nm_i->nat_tree_lock);
|
|
@@ -2089,14 +2092,14 @@ static void __build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
|
|
|
|
|
|
up_read(&nm_i->nat_tree_lock);
|
|
|
|
|
|
- ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nm_i->next_scan_nid),
|
|
|
+ f2fs_ra_meta_pages(sbi, NAT_BLOCK_OFFSET(nm_i->next_scan_nid),
|
|
|
nm_i->ra_nid_pages, META_NAT, false);
|
|
|
}
|
|
|
|
|
|
-void build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
|
|
|
+void f2fs_build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
|
|
|
{
|
|
|
mutex_lock(&NM_I(sbi)->build_lock);
|
|
|
- __build_free_nids(sbi, sync, mount);
|
|
|
+ __f2fs_build_free_nids(sbi, sync, mount);
|
|
|
mutex_unlock(&NM_I(sbi)->build_lock);
|
|
|
}
|
|
|
|
|
@@ -2105,7 +2108,7 @@ void build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount)
|
|
|
* from second parameter of this function.
|
|
|
* The returned nid could be used ino as well as nid when inode is created.
|
|
|
*/
|
|
|
-bool alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid)
|
|
|
+bool f2fs_alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct free_nid *i = NULL;
|
|
@@ -2123,8 +2126,8 @@ retry:
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- /* We should not use stale free nids created by build_free_nids */
|
|
|
- if (nm_i->nid_cnt[FREE_NID] && !on_build_free_nids(nm_i)) {
|
|
|
+ /* We should not use stale free nids created by f2fs_build_free_nids */
|
|
|
+ if (nm_i->nid_cnt[FREE_NID] && !on_f2fs_build_free_nids(nm_i)) {
|
|
|
f2fs_bug_on(sbi, list_empty(&nm_i->free_nid_list));
|
|
|
i = list_first_entry(&nm_i->free_nid_list,
|
|
|
struct free_nid, list);
|
|
@@ -2141,14 +2144,14 @@ retry:
|
|
|
spin_unlock(&nm_i->nid_list_lock);
|
|
|
|
|
|
/* Let's scan nat pages and its caches to get free nids */
|
|
|
- build_free_nids(sbi, true, false);
|
|
|
+ f2fs_build_free_nids(sbi, true, false);
|
|
|
goto retry;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * alloc_nid() should be called prior to this function.
|
|
|
+ * f2fs_alloc_nid() should be called prior to this function.
|
|
|
*/
|
|
|
-void alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
+void f2fs_alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct free_nid *i;
|
|
@@ -2163,9 +2166,9 @@ void alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * alloc_nid() should be called prior to this function.
|
|
|
+ * f2fs_alloc_nid() should be called prior to this function.
|
|
|
*/
|
|
|
-void alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
+void f2fs_alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct free_nid *i;
|
|
@@ -2178,7 +2181,7 @@ void alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
i = __lookup_free_nid_list(nm_i, nid);
|
|
|
f2fs_bug_on(sbi, !i);
|
|
|
|
|
|
- if (!available_free_memory(sbi, FREE_NIDS)) {
|
|
|
+ if (!f2fs_available_free_memory(sbi, FREE_NIDS)) {
|
|
|
__remove_free_nid(sbi, i, PREALLOC_NID);
|
|
|
need_free = true;
|
|
|
} else {
|
|
@@ -2195,7 +2198,7 @@ void alloc_nid_failed(struct f2fs_sb_info *sbi, nid_t nid)
|
|
|
kmem_cache_free(free_nid_slab, i);
|
|
|
}
|
|
|
|
|
|
-int try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink)
|
|
|
+int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct free_nid *i, *next;
|
|
@@ -2223,14 +2226,14 @@ int try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink)
|
|
|
return nr - nr_shrink;
|
|
|
}
|
|
|
|
|
|
-void recover_inline_xattr(struct inode *inode, struct page *page)
|
|
|
+void f2fs_recover_inline_xattr(struct inode *inode, struct page *page)
|
|
|
{
|
|
|
void *src_addr, *dst_addr;
|
|
|
size_t inline_size;
|
|
|
struct page *ipage;
|
|
|
struct f2fs_inode *ri;
|
|
|
|
|
|
- ipage = get_node_page(F2FS_I_SB(inode), inode->i_ino);
|
|
|
+ ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
|
|
|
f2fs_bug_on(F2FS_I_SB(inode), IS_ERR(ipage));
|
|
|
|
|
|
ri = F2FS_INODE(page);
|
|
@@ -2248,11 +2251,11 @@ void recover_inline_xattr(struct inode *inode, struct page *page)
|
|
|
f2fs_wait_on_page_writeback(ipage, NODE, true);
|
|
|
memcpy(dst_addr, src_addr, inline_size);
|
|
|
update_inode:
|
|
|
- update_inode(inode, ipage);
|
|
|
+ f2fs_update_inode(inode, ipage);
|
|
|
f2fs_put_page(ipage, 1);
|
|
|
}
|
|
|
|
|
|
-int recover_xattr_data(struct inode *inode, struct page *page)
|
|
|
+int f2fs_recover_xattr_data(struct inode *inode, struct page *page)
|
|
|
{
|
|
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
|
|
nid_t prev_xnid = F2FS_I(inode)->i_xattr_nid;
|
|
@@ -2265,25 +2268,25 @@ int recover_xattr_data(struct inode *inode, struct page *page)
|
|
|
goto recover_xnid;
|
|
|
|
|
|
/* 1: invalidate the previous xattr nid */
|
|
|
- get_node_info(sbi, prev_xnid, &ni);
|
|
|
- invalidate_blocks(sbi, ni.blk_addr);
|
|
|
+ f2fs_get_node_info(sbi, prev_xnid, &ni);
|
|
|
+ f2fs_invalidate_blocks(sbi, ni.blk_addr);
|
|
|
dec_valid_node_count(sbi, inode, false);
|
|
|
set_node_addr(sbi, &ni, NULL_ADDR, false);
|
|
|
|
|
|
recover_xnid:
|
|
|
/* 2: update xattr nid in inode */
|
|
|
- if (!alloc_nid(sbi, &new_xnid))
|
|
|
+ if (!f2fs_alloc_nid(sbi, &new_xnid))
|
|
|
return -ENOSPC;
|
|
|
|
|
|
set_new_dnode(&dn, inode, NULL, NULL, new_xnid);
|
|
|
- xpage = new_node_page(&dn, XATTR_NODE_OFFSET);
|
|
|
+ xpage = f2fs_new_node_page(&dn, XATTR_NODE_OFFSET);
|
|
|
if (IS_ERR(xpage)) {
|
|
|
- alloc_nid_failed(sbi, new_xnid);
|
|
|
+ f2fs_alloc_nid_failed(sbi, new_xnid);
|
|
|
return PTR_ERR(xpage);
|
|
|
}
|
|
|
|
|
|
- alloc_nid_done(sbi, new_xnid);
|
|
|
- update_inode_page(inode);
|
|
|
+ f2fs_alloc_nid_done(sbi, new_xnid);
|
|
|
+ f2fs_update_inode_page(inode);
|
|
|
|
|
|
/* 3: update and set xattr node page dirty */
|
|
|
memcpy(F2FS_NODE(xpage), F2FS_NODE(page), VALID_XATTR_BLOCK_SIZE);
|
|
@@ -2294,14 +2297,14 @@ recover_xnid:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
|
|
|
+int f2fs_recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
|
|
|
{
|
|
|
struct f2fs_inode *src, *dst;
|
|
|
nid_t ino = ino_of_node(page);
|
|
|
struct node_info old_ni, new_ni;
|
|
|
struct page *ipage;
|
|
|
|
|
|
- get_node_info(sbi, ino, &old_ni);
|
|
|
+ f2fs_get_node_info(sbi, ino, &old_ni);
|
|
|
|
|
|
if (unlikely(old_ni.blk_addr != NULL_ADDR))
|
|
|
return -EINVAL;
|
|
@@ -2355,7 +2358,7 @@ retry:
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-void restore_node_summary(struct f2fs_sb_info *sbi,
|
|
|
+void f2fs_restore_node_summary(struct f2fs_sb_info *sbi,
|
|
|
unsigned int segno, struct f2fs_summary_block *sum)
|
|
|
{
|
|
|
struct f2fs_node *rn;
|
|
@@ -2372,10 +2375,10 @@ void restore_node_summary(struct f2fs_sb_info *sbi,
|
|
|
nrpages = min(last_offset - i, BIO_MAX_PAGES);
|
|
|
|
|
|
/* readahead node pages */
|
|
|
- ra_meta_pages(sbi, addr, nrpages, META_POR, true);
|
|
|
+ f2fs_ra_meta_pages(sbi, addr, nrpages, META_POR, true);
|
|
|
|
|
|
for (idx = addr; idx < addr + nrpages; idx++) {
|
|
|
- struct page *page = get_tmp_page(sbi, idx);
|
|
|
+ struct page *page = f2fs_get_tmp_page(sbi, idx);
|
|
|
|
|
|
rn = F2FS_NODE(page);
|
|
|
sum_entry->nid = rn->footer.nid;
|
|
@@ -2517,7 +2520,7 @@ static void __flush_nat_entry_set(struct f2fs_sb_info *sbi,
|
|
|
f2fs_bug_on(sbi, nat_get_blkaddr(ne) == NEW_ADDR);
|
|
|
|
|
|
if (to_journal) {
|
|
|
- offset = lookup_journal_in_cursum(journal,
|
|
|
+ offset = f2fs_lookup_journal_in_cursum(journal,
|
|
|
NAT_JOURNAL, nid, 1);
|
|
|
f2fs_bug_on(sbi, offset < 0);
|
|
|
raw_ne = &nat_in_journal(journal, offset);
|
|
@@ -2554,7 +2557,7 @@ static void __flush_nat_entry_set(struct f2fs_sb_info *sbi,
|
|
|
/*
|
|
|
* This function is called during the checkpointing process.
|
|
|
*/
|
|
|
-void flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
|
+void f2fs_flush_nat_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_HOT_DATA);
|
|
@@ -2617,7 +2620,7 @@ static int __get_nat_bitmaps(struct f2fs_sb_info *sbi)
|
|
|
nat_bits_addr = __start_cp_addr(sbi) + sbi->blocks_per_seg -
|
|
|
nm_i->nat_bits_blocks;
|
|
|
for (i = 0; i < nm_i->nat_bits_blocks; i++) {
|
|
|
- struct page *page = get_meta_page(sbi, nat_bits_addr++);
|
|
|
+ struct page *page = f2fs_get_meta_page(sbi, nat_bits_addr++);
|
|
|
|
|
|
memcpy(nm_i->nat_bits + (i << F2FS_BLKSIZE_BITS),
|
|
|
page_address(page), F2FS_BLKSIZE);
|
|
@@ -2760,7 +2763,7 @@ static int init_free_nid_cache(struct f2fs_sb_info *sbi)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int build_node_manager(struct f2fs_sb_info *sbi)
|
|
|
+int f2fs_build_node_manager(struct f2fs_sb_info *sbi)
|
|
|
{
|
|
|
int err;
|
|
|
|
|
@@ -2780,11 +2783,11 @@ int build_node_manager(struct f2fs_sb_info *sbi)
|
|
|
/* load free nid status from nat_bits table */
|
|
|
load_free_nid_bitmap(sbi);
|
|
|
|
|
|
- build_free_nids(sbi, true, true);
|
|
|
+ f2fs_build_free_nids(sbi, true, true);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-void destroy_node_manager(struct f2fs_sb_info *sbi)
|
|
|
+void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi)
|
|
|
{
|
|
|
struct f2fs_nm_info *nm_i = NM_I(sbi);
|
|
|
struct free_nid *i, *next_i;
|
|
@@ -2856,7 +2859,7 @@ void destroy_node_manager(struct f2fs_sb_info *sbi)
|
|
|
kfree(nm_i);
|
|
|
}
|
|
|
|
|
|
-int __init create_node_manager_caches(void)
|
|
|
+int __init f2fs_create_node_manager_caches(void)
|
|
|
{
|
|
|
nat_entry_slab = f2fs_kmem_cache_create("nat_entry",
|
|
|
sizeof(struct nat_entry));
|
|
@@ -2882,7 +2885,7 @@ fail:
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
-void destroy_node_manager_caches(void)
|
|
|
+void f2fs_destroy_node_manager_caches(void)
|
|
|
{
|
|
|
kmem_cache_destroy(nat_entry_set_slab);
|
|
|
kmem_cache_destroy(free_nid_slab);
|