Commit 45590710 authored by Gu Zheng's avatar Gu Zheng Committed by Jaegeuk Kim

f2fs: introduce help function F2FS_NODE()

Introduce help function F2FS_NODE() to simplify the conversion of node_page to
f2fs_node.
Signed-off-by: default avatarGu Zheng <guz.fnst@cn.fujitsu.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
parent 963d4f7d
...@@ -39,7 +39,7 @@ static void __set_data_blkaddr(struct dnode_of_data *dn, block_t new_addr) ...@@ -39,7 +39,7 @@ static void __set_data_blkaddr(struct dnode_of_data *dn, block_t new_addr)
wait_on_page_writeback(node_page); wait_on_page_writeback(node_page);
rn = (struct f2fs_node *)page_address(node_page); rn = F2FS_NODE(node_page);
/* Get physical address of data block */ /* Get physical address of data block */
addr_array = blkaddr_in_node(rn); addr_array = blkaddr_in_node(rn);
......
...@@ -270,7 +270,7 @@ static void init_dent_inode(const struct qstr *name, struct page *ipage) ...@@ -270,7 +270,7 @@ static void init_dent_inode(const struct qstr *name, struct page *ipage)
struct f2fs_node *rn; struct f2fs_node *rn;
/* copy name info. to this inode page */ /* copy name info. to this inode page */
rn = (struct f2fs_node *)page_address(ipage); rn = F2FS_NODE(ipage);
rn->i.i_namelen = cpu_to_le32(name->len); rn->i.i_namelen = cpu_to_le32(name->len);
memcpy(rn->i.i_name, name->name, name->len); memcpy(rn->i.i_name, name->name, name->len);
set_page_dirty(ipage); set_page_dirty(ipage);
......
...@@ -455,6 +455,11 @@ static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi) ...@@ -455,6 +455,11 @@ static inline struct f2fs_checkpoint *F2FS_CKPT(struct f2fs_sb_info *sbi)
return (struct f2fs_checkpoint *)(sbi->ckpt); return (struct f2fs_checkpoint *)(sbi->ckpt);
} }
static inline struct f2fs_node *F2FS_NODE(struct page *page)
{
return (struct f2fs_node *)page_address(page);
}
static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi) static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi)
{ {
return (struct f2fs_nm_info *)(sbi->nm_info); return (struct f2fs_nm_info *)(sbi->nm_info);
...@@ -813,7 +818,7 @@ static inline struct kmem_cache *f2fs_kmem_cache_create(const char *name, ...@@ -813,7 +818,7 @@ static inline struct kmem_cache *f2fs_kmem_cache_create(const char *name,
static inline bool IS_INODE(struct page *page) static inline bool IS_INODE(struct page *page)
{ {
struct f2fs_node *p = (struct f2fs_node *)page_address(page); struct f2fs_node *p = F2FS_NODE(page);
return RAW_IS_INODE(p); return RAW_IS_INODE(p);
} }
...@@ -827,7 +832,7 @@ static inline block_t datablock_addr(struct page *node_page, ...@@ -827,7 +832,7 @@ static inline block_t datablock_addr(struct page *node_page,
{ {
struct f2fs_node *raw_node; struct f2fs_node *raw_node;
__le32 *addr_array; __le32 *addr_array;
raw_node = (struct f2fs_node *)page_address(node_page); raw_node = F2FS_NODE(node_page);
addr_array = blkaddr_in_node(raw_node); addr_array = blkaddr_in_node(raw_node);
return le32_to_cpu(addr_array[offset]); return le32_to_cpu(addr_array[offset]);
} }
......
...@@ -206,7 +206,7 @@ int truncate_data_blocks_range(struct dnode_of_data *dn, int count) ...@@ -206,7 +206,7 @@ int truncate_data_blocks_range(struct dnode_of_data *dn, int count)
struct f2fs_node *raw_node; struct f2fs_node *raw_node;
__le32 *addr; __le32 *addr;
raw_node = page_address(dn->node_page); raw_node = F2FS_NODE(dn->node_page);
addr = blkaddr_in_node(raw_node) + ofs; addr = blkaddr_in_node(raw_node) + ofs;
for ( ; count > 0; count--, addr++, dn->ofs_in_node++) { for ( ; count > 0; count--, addr++, dn->ofs_in_node++) {
......
...@@ -56,7 +56,7 @@ static int do_read_inode(struct inode *inode) ...@@ -56,7 +56,7 @@ static int do_read_inode(struct inode *inode)
if (IS_ERR(node_page)) if (IS_ERR(node_page))
return PTR_ERR(node_page); return PTR_ERR(node_page);
rn = page_address(node_page); rn = F2FS_NODE(node_page);
ri = &(rn->i); ri = &(rn->i);
inode->i_mode = le16_to_cpu(ri->i_mode); inode->i_mode = le16_to_cpu(ri->i_mode);
...@@ -153,7 +153,7 @@ void update_inode(struct inode *inode, struct page *node_page) ...@@ -153,7 +153,7 @@ void update_inode(struct inode *inode, struct page *node_page)
wait_on_page_writeback(node_page); wait_on_page_writeback(node_page);
rn = page_address(node_page); rn = F2FS_NODE(node_page);
ri = &(rn->i); ri = &(rn->i);
ri->i_mode = cpu_to_le16(inode->i_mode); ri->i_mode = cpu_to_le16(inode->i_mode);
......
...@@ -565,7 +565,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs, ...@@ -565,7 +565,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
return PTR_ERR(page); return PTR_ERR(page);
} }
rn = (struct f2fs_node *)page_address(page); rn = F2FS_NODE(page);
if (depth < 3) { if (depth < 3) {
for (i = ofs; i < NIDS_PER_BLOCK; i++, freed++) { for (i = ofs; i < NIDS_PER_BLOCK; i++, freed++) {
child_nid = le32_to_cpu(rn->in.nid[i]); child_nid = le32_to_cpu(rn->in.nid[i]);
...@@ -698,7 +698,7 @@ int truncate_inode_blocks(struct inode *inode, pgoff_t from) ...@@ -698,7 +698,7 @@ int truncate_inode_blocks(struct inode *inode, pgoff_t from)
set_new_dnode(&dn, inode, page, NULL, 0); set_new_dnode(&dn, inode, page, NULL, 0);
unlock_page(page); unlock_page(page);
rn = page_address(page); rn = F2FS_NODE(page);
switch (level) { switch (level) {
case 0: case 0:
case 1: case 1:
...@@ -1484,8 +1484,8 @@ int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page) ...@@ -1484,8 +1484,8 @@ int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page)
SetPageUptodate(ipage); SetPageUptodate(ipage);
fill_node_footer(ipage, ino, ino, 0, true); fill_node_footer(ipage, ino, ino, 0, true);
src = (struct f2fs_node *)page_address(page); src = F2FS_NODE(page);
dst = (struct f2fs_node *)page_address(ipage); dst = F2FS_NODE(ipage);
memcpy(dst, src, (unsigned long)&src->i.i_ext - (unsigned long)&src->i); memcpy(dst, src, (unsigned long)&src->i.i_ext - (unsigned long)&src->i);
dst->i.i_size = 0; dst->i.i_size = 0;
...@@ -1535,7 +1535,7 @@ int restore_node_summary(struct f2fs_sb_info *sbi, ...@@ -1535,7 +1535,7 @@ int restore_node_summary(struct f2fs_sb_info *sbi,
goto out; goto out;
lock_page(page); lock_page(page);
rn = (struct f2fs_node *)page_address(page); rn = F2FS_NODE(page);
sum_entry->nid = rn->footer.nid; sum_entry->nid = rn->footer.nid;
sum_entry->version = 0; sum_entry->version = 0;
sum_entry->ofs_in_node = 0; sum_entry->ofs_in_node = 0;
......
...@@ -155,8 +155,7 @@ static inline void set_to_next_nat(struct f2fs_nm_info *nm_i, nid_t start_nid) ...@@ -155,8 +155,7 @@ static inline void set_to_next_nat(struct f2fs_nm_info *nm_i, nid_t start_nid)
static inline void fill_node_footer(struct page *page, nid_t nid, static inline void fill_node_footer(struct page *page, nid_t nid,
nid_t ino, unsigned int ofs, bool reset) nid_t ino, unsigned int ofs, bool reset)
{ {
void *kaddr = page_address(page); struct f2fs_node *rn = F2FS_NODE(page);
struct f2fs_node *rn = (struct f2fs_node *)kaddr;
if (reset) if (reset)
memset(rn, 0, sizeof(*rn)); memset(rn, 0, sizeof(*rn));
rn->footer.nid = cpu_to_le32(nid); rn->footer.nid = cpu_to_le32(nid);
...@@ -166,10 +165,8 @@ static inline void fill_node_footer(struct page *page, nid_t nid, ...@@ -166,10 +165,8 @@ static inline void fill_node_footer(struct page *page, nid_t nid,
static inline void copy_node_footer(struct page *dst, struct page *src) static inline void copy_node_footer(struct page *dst, struct page *src)
{ {
void *src_addr = page_address(src); struct f2fs_node *src_rn = F2FS_NODE(src);
void *dst_addr = page_address(dst); struct f2fs_node *dst_rn = F2FS_NODE(dst);
struct f2fs_node *src_rn = (struct f2fs_node *)src_addr;
struct f2fs_node *dst_rn = (struct f2fs_node *)dst_addr;
memcpy(&dst_rn->footer, &src_rn->footer, sizeof(struct node_footer)); memcpy(&dst_rn->footer, &src_rn->footer, sizeof(struct node_footer));
} }
...@@ -177,45 +174,40 @@ static inline void fill_node_footer_blkaddr(struct page *page, block_t blkaddr) ...@@ -177,45 +174,40 @@ static inline void fill_node_footer_blkaddr(struct page *page, block_t blkaddr)
{ {
struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb); struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb);
struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi); struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
void *kaddr = page_address(page); struct f2fs_node *rn = F2FS_NODE(page);
struct f2fs_node *rn = (struct f2fs_node *)kaddr;
rn->footer.cp_ver = ckpt->checkpoint_ver; rn->footer.cp_ver = ckpt->checkpoint_ver;
rn->footer.next_blkaddr = cpu_to_le32(blkaddr); rn->footer.next_blkaddr = cpu_to_le32(blkaddr);
} }
static inline nid_t ino_of_node(struct page *node_page) static inline nid_t ino_of_node(struct page *node_page)
{ {
void *kaddr = page_address(node_page); struct f2fs_node *rn = F2FS_NODE(node_page);
struct f2fs_node *rn = (struct f2fs_node *)kaddr;
return le32_to_cpu(rn->footer.ino); return le32_to_cpu(rn->footer.ino);
} }
static inline nid_t nid_of_node(struct page *node_page) static inline nid_t nid_of_node(struct page *node_page)
{ {
void *kaddr = page_address(node_page); struct f2fs_node *rn = F2FS_NODE(node_page);
struct f2fs_node *rn = (struct f2fs_node *)kaddr;
return le32_to_cpu(rn->footer.nid); return le32_to_cpu(rn->footer.nid);
} }
static inline unsigned int ofs_of_node(struct page *node_page) static inline unsigned int ofs_of_node(struct page *node_page)
{ {
void *kaddr = page_address(node_page); struct f2fs_node *rn = F2FS_NODE(node_page);
struct f2fs_node *rn = (struct f2fs_node *)kaddr;
unsigned flag = le32_to_cpu(rn->footer.flag); unsigned flag = le32_to_cpu(rn->footer.flag);
return flag >> OFFSET_BIT_SHIFT; return flag >> OFFSET_BIT_SHIFT;
} }
static inline unsigned long long cpver_of_node(struct page *node_page) static inline unsigned long long cpver_of_node(struct page *node_page)
{ {
void *kaddr = page_address(node_page); struct f2fs_node *rn = F2FS_NODE(node_page);
struct f2fs_node *rn = (struct f2fs_node *)kaddr;
return le64_to_cpu(rn->footer.cp_ver); return le64_to_cpu(rn->footer.cp_ver);
} }
static inline block_t next_blkaddr_of_node(struct page *node_page) static inline block_t next_blkaddr_of_node(struct page *node_page)
{ {
void *kaddr = page_address(node_page); struct f2fs_node *rn = F2FS_NODE(node_page);
struct f2fs_node *rn = (struct f2fs_node *)kaddr;
return le32_to_cpu(rn->footer.next_blkaddr); return le32_to_cpu(rn->footer.next_blkaddr);
} }
...@@ -250,7 +242,7 @@ static inline bool IS_DNODE(struct page *node_page) ...@@ -250,7 +242,7 @@ static inline bool IS_DNODE(struct page *node_page)
static inline void set_nid(struct page *p, int off, nid_t nid, bool i) static inline void set_nid(struct page *p, int off, nid_t nid, bool i)
{ {
struct f2fs_node *rn = (struct f2fs_node *)page_address(p); struct f2fs_node *rn = F2FS_NODE(p);
wait_on_page_writeback(p); wait_on_page_writeback(p);
...@@ -263,7 +255,8 @@ static inline void set_nid(struct page *p, int off, nid_t nid, bool i) ...@@ -263,7 +255,8 @@ static inline void set_nid(struct page *p, int off, nid_t nid, bool i)
static inline nid_t get_nid(struct page *p, int off, bool i) static inline nid_t get_nid(struct page *p, int off, bool i)
{ {
struct f2fs_node *rn = (struct f2fs_node *)page_address(p); struct f2fs_node *rn = F2FS_NODE(p);
if (i) if (i)
return le32_to_cpu(rn->i.i_nid[off - NODE_DIR1_BLOCK]); return le32_to_cpu(rn->i.i_nid[off - NODE_DIR1_BLOCK]);
return le32_to_cpu(rn->in.nid[off]); return le32_to_cpu(rn->in.nid[off]);
...@@ -314,8 +307,7 @@ static inline void clear_cold_data(struct page *page) ...@@ -314,8 +307,7 @@ static inline void clear_cold_data(struct page *page)
static inline int is_node(struct page *page, int type) static inline int is_node(struct page *page, int type)
{ {
void *kaddr = page_address(page); struct f2fs_node *rn = F2FS_NODE(page);
struct f2fs_node *rn = (struct f2fs_node *)kaddr;
return le32_to_cpu(rn->footer.flag) & (1 << type); return le32_to_cpu(rn->footer.flag) & (1 << type);
} }
...@@ -325,7 +317,7 @@ static inline int is_node(struct page *page, int type) ...@@ -325,7 +317,7 @@ static inline int is_node(struct page *page, int type)
static inline void set_cold_node(struct inode *inode, struct page *page) static inline void set_cold_node(struct inode *inode, struct page *page)
{ {
struct f2fs_node *rn = (struct f2fs_node *)page_address(page); struct f2fs_node *rn = F2FS_NODE(page);
unsigned int flag = le32_to_cpu(rn->footer.flag); unsigned int flag = le32_to_cpu(rn->footer.flag);
if (S_ISDIR(inode->i_mode)) if (S_ISDIR(inode->i_mode))
...@@ -337,7 +329,7 @@ static inline void set_cold_node(struct inode *inode, struct page *page) ...@@ -337,7 +329,7 @@ static inline void set_cold_node(struct inode *inode, struct page *page)
static inline void set_mark(struct page *page, int mark, int type) static inline void set_mark(struct page *page, int mark, int type)
{ {
struct f2fs_node *rn = (struct f2fs_node *)page_address(page); struct f2fs_node *rn = F2FS_NODE(page);
unsigned int flag = le32_to_cpu(rn->footer.flag); unsigned int flag = le32_to_cpu(rn->footer.flag);
if (mark) if (mark)
flag |= (0x1 << type); flag |= (0x1 << type);
......
...@@ -40,8 +40,7 @@ static struct fsync_inode_entry *get_fsync_inode(struct list_head *head, ...@@ -40,8 +40,7 @@ static struct fsync_inode_entry *get_fsync_inode(struct list_head *head,
static int recover_dentry(struct page *ipage, struct inode *inode) static int recover_dentry(struct page *ipage, struct inode *inode)
{ {
void *kaddr = page_address(ipage); struct f2fs_node *raw_node = F2FS_NODE(ipage);
struct f2fs_node *raw_node = (struct f2fs_node *)kaddr;
struct f2fs_inode *raw_inode = &(raw_node->i); struct f2fs_inode *raw_inode = &(raw_node->i);
nid_t pino = le32_to_cpu(raw_inode->i_pino); nid_t pino = le32_to_cpu(raw_inode->i_pino);
struct f2fs_dir_entry *de; struct f2fs_dir_entry *de;
...@@ -93,8 +92,7 @@ static int recover_dentry(struct page *ipage, struct inode *inode) ...@@ -93,8 +92,7 @@ static int recover_dentry(struct page *ipage, struct inode *inode)
static int recover_inode(struct inode *inode, struct page *node_page) static int recover_inode(struct inode *inode, struct page *node_page)
{ {
void *kaddr = page_address(node_page); struct f2fs_node *raw_node = F2FS_NODE(node_page);
struct f2fs_node *raw_node = (struct f2fs_node *)kaddr;
struct f2fs_inode *raw_inode = &(raw_node->i); struct f2fs_inode *raw_inode = &(raw_node->i);
if (!IS_INODE(node_page)) if (!IS_INODE(node_page))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment