* [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode @ 2013-12-26 8:17 Jaegeuk Kim 2013-12-26 8:17 ` [PATCH 2/2] f2fs: should put the dnode when NEW_ADDR is detected Jaegeuk Kim 2013-12-26 9:24 ` [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode Chao Yu 0 siblings, 2 replies; 4+ messages in thread From: Jaegeuk Kim @ 2013-12-26 8:17 UTC (permalink / raw) Cc: linux-fsdevel, linux-kernel, linux-f2fs-devel This patch introduces F2FS_INODE that returns struct f2fs_inode * from the inode page. By using this macro, we can remove unnecessary casting codes like below. struct f2fs_inode *ri = &F2FS_NODE(inode_page)->i; -> struct f2fs_inode *ri = F2FS_INODE(inode_page); Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com> --- fs/f2fs/dir.c | 8 ++++---- fs/f2fs/f2fs.h | 5 +++++ fs/f2fs/inode.c | 8 ++------ fs/f2fs/node.c | 14 +++++++------- fs/f2fs/recovery.c | 6 ++---- 5 files changed, 20 insertions(+), 21 deletions(-) diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c index f0b4630..6da77e5 100644 --- a/fs/f2fs/dir.c +++ b/fs/f2fs/dir.c @@ -261,12 +261,12 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, static void init_dent_inode(const struct qstr *name, struct page *ipage) { - struct f2fs_node *rn; + struct f2fs_inode *ri; /* copy name info. to this inode page */ - rn = F2FS_NODE(ipage); - rn->i.i_namelen = cpu_to_le32(name->len); - memcpy(rn->i.i_name, name->name, name->len); + ri = F2FS_INODE(ipage); + ri->i_namelen = cpu_to_le32(name->len); + memcpy(ri->i_name, name->name, name->len); set_page_dirty(ipage); } diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index ba91186..1a06f0a 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -498,6 +498,11 @@ static inline struct f2fs_node *F2FS_NODE(struct page *page) return (struct f2fs_node *)page_address(page); } +static inline struct f2fs_inode *F2FS_INODE(struct page *page) +{ + return &((struct f2fs_node *)page_address(page))->i; +} + static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi) { return (struct f2fs_nm_info *)(sbi->nm_info); diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index d0eaa9f..a91f451 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -67,7 +67,6 @@ static int do_read_inode(struct inode *inode) struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); struct f2fs_inode_info *fi = F2FS_I(inode); struct page *node_page; - struct f2fs_node *rn; struct f2fs_inode *ri; /* Check if ino is within scope */ @@ -81,8 +80,7 @@ static int do_read_inode(struct inode *inode) if (IS_ERR(node_page)) return PTR_ERR(node_page); - rn = F2FS_NODE(node_page); - ri = &(rn->i); + ri = F2FS_INODE(node_page); inode->i_mode = le16_to_cpu(ri->i_mode); i_uid_write(inode, le32_to_cpu(ri->i_uid)); @@ -175,13 +173,11 @@ bad_inode: void update_inode(struct inode *inode, struct page *node_page) { - struct f2fs_node *rn; struct f2fs_inode *ri; f2fs_wait_on_page_writeback(node_page, NODE, false); - rn = F2FS_NODE(node_page); - ri = &(rn->i); + ri = F2FS_INODE(node_page); ri->i_mode = cpu_to_le16(inode->i_mode); ri->i_advise = F2FS_I(inode)->i_advise; diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index e8fe52d..6fdd88c 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -684,7 +684,7 @@ int truncate_inode_blocks(struct inode *inode, pgoff_t from) int err = 0, cont = 1; int level, offset[4], noffset[4]; unsigned int nofs = 0; - struct f2fs_node *rn; + struct f2fs_inode *ri; struct dnode_of_data dn; struct page *page; @@ -701,7 +701,7 @@ restart: set_new_dnode(&dn, inode, page, NULL, 0); unlock_page(page); - rn = F2FS_NODE(page); + ri = F2FS_INODE(page); switch (level) { case 0: case 1: @@ -711,7 +711,7 @@ restart: nofs = noffset[1]; if (!offset[level - 1]) goto skip_partial; - err = truncate_partial_nodes(&dn, &rn->i, offset, level); + err = truncate_partial_nodes(&dn, ri, offset, level); if (err < 0 && err != -ENOENT) goto fail; nofs += 1 + NIDS_PER_BLOCK; @@ -720,7 +720,7 @@ restart: nofs = 5 + 2 * NIDS_PER_BLOCK; if (!offset[level - 1]) goto skip_partial; - err = truncate_partial_nodes(&dn, &rn->i, offset, level); + err = truncate_partial_nodes(&dn, ri, offset, level); if (err < 0 && err != -ENOENT) goto fail; break; @@ -730,7 +730,7 @@ restart: skip_partial: while (cont) { - dn.nid = le32_to_cpu(rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK]); + dn.nid = le32_to_cpu(ri->i_nid[offset[0] - NODE_DIR1_BLOCK]); switch (offset[0]) { case NODE_DIR1_BLOCK: case NODE_DIR2_BLOCK: @@ -753,14 +753,14 @@ skip_partial: if (err < 0 && err != -ENOENT) goto fail; if (offset[1] == 0 && - rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK]) { + ri->i_nid[offset[0] - NODE_DIR1_BLOCK]) { lock_page(page); if (unlikely(page->mapping != node_mapping)) { f2fs_put_page(page, 1); goto restart; } wait_on_page_writeback(page); - rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; + ri->i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; set_page_dirty(page); unlock_page(page); } diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c index 4d411a2..96e690b6 100644 --- a/fs/f2fs/recovery.c +++ b/fs/f2fs/recovery.c @@ -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) { - struct f2fs_node *raw_node = F2FS_NODE(ipage); - struct f2fs_inode *raw_inode = &(raw_node->i); + struct f2fs_inode *raw_inode = F2FS_INODE(ipage); nid_t pino = le32_to_cpu(raw_inode->i_pino); struct f2fs_dir_entry *de; struct qstr name; @@ -105,8 +104,7 @@ out: static int recover_inode(struct inode *inode, struct page *node_page) { - struct f2fs_node *raw_node = F2FS_NODE(node_page); - struct f2fs_inode *raw_inode = &(raw_node->i); + struct f2fs_inode *raw_inode = F2FS_INODE(node_page); if (!IS_INODE(node_page)) return 0; -- 1.8.4.474.g128a96c ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] f2fs: should put the dnode when NEW_ADDR is detected 2013-12-26 8:17 [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode Jaegeuk Kim @ 2013-12-26 8:17 ` Jaegeuk Kim 2013-12-26 9:24 ` [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode Chao Yu 1 sibling, 0 replies; 4+ messages in thread From: Jaegeuk Kim @ 2013-12-26 8:17 UTC (permalink / raw) Cc: linux-fsdevel, linux-kernel, linux-f2fs-devel When get_dnode_of_data() in get_data_block() returns a successful dnode, we should put the dnode. But, previously, if its data block address is equal to NEW_ADDR, we didn't do that, resulting in a deadlock condition. So, this patch splits original error conditions with this case, and then calls f2fs_put_dnode before finishing the function. Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com> --- fs/f2fs/data.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 0879d2a..991e368 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -626,11 +626,13 @@ static int get_data_block(struct inode *inode, sector_t iblock, /* When reading holes, we need its node page */ set_new_dnode(&dn, inode, NULL, NULL, 0); err = get_dnode_of_data(&dn, pgofs, mode); - if (err || dn.data_blkaddr == NEW_ADDR) { + if (err) { if (err == -ENOENT) err = 0; goto unlock_out; } + if (dn.data_blkaddr == NEW_ADDR) + goto put_out; if (dn.data_blkaddr != NULL_ADDR) { map_bh(bh_result, inode->i_sb, dn.data_blkaddr); @@ -659,11 +661,14 @@ get_next: set_new_dnode(&dn, inode, NULL, NULL, 0); err = get_dnode_of_data(&dn, pgofs, mode); - if (err || dn.data_blkaddr == NEW_ADDR) { + if (err) { if (err == -ENOENT) err = 0; goto unlock_out; } + if (dn.data_blkaddr == NEW_ADDR) + goto put_out; + end_offset = IS_INODE(dn.node_page) ? ADDRS_PER_INODE(F2FS_I(inode)) : ADDRS_PER_BLOCK; } -- 1.8.4.474.g128a96c ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode 2013-12-26 8:17 [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode Jaegeuk Kim 2013-12-26 8:17 ` [PATCH 2/2] f2fs: should put the dnode when NEW_ADDR is detected Jaegeuk Kim @ 2013-12-26 9:24 ` Chao Yu 2013-12-26 11:37 ` [PATCH v2] " Jaegeuk Kim 1 sibling, 1 reply; 4+ messages in thread From: Chao Yu @ 2013-12-26 9:24 UTC (permalink / raw) To: 'Jaegeuk Kim'; +Cc: linux-fsdevel, linux-kernel, linux-f2fs-devel Hi, > -----Original Message----- > From: Jaegeuk Kim [mailto:jaegeuk.kim@samsung.com] > Sent: Thursday, December 26, 2013 4:17 PM > Cc: linux-fsdevel@vger.kernel.org; linux-kernel@vger.kernel.org; linux-f2fs-devel@lists.sourceforge.net > Subject: [f2fs-dev] [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode > > This patch introduces F2FS_INODE that returns struct f2fs_inode * from the inode > page. > By using this macro, we can remove unnecessary casting codes like below. > > struct f2fs_inode *ri = &F2FS_NODE(inode_page)->i; > -> struct f2fs_inode *ri = F2FS_INODE(inode_page); Looks Nice! Could we apply this to recover_inode_page? It seems that we just use inode data only. > > Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com> Reviewed-by: Chao Yu <chao2.yu@samsung.com> > --- > fs/f2fs/dir.c | 8 ++++---- > fs/f2fs/f2fs.h | 5 +++++ > fs/f2fs/inode.c | 8 ++------ > fs/f2fs/node.c | 14 +++++++------- > fs/f2fs/recovery.c | 6 ++---- > 5 files changed, 20 insertions(+), 21 deletions(-) > > diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c > index f0b4630..6da77e5 100644 > --- a/fs/f2fs/dir.c > +++ b/fs/f2fs/dir.c > @@ -261,12 +261,12 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, > > static void init_dent_inode(const struct qstr *name, struct page *ipage) > { > - struct f2fs_node *rn; > + struct f2fs_inode *ri; > > /* copy name info. to this inode page */ > - rn = F2FS_NODE(ipage); > - rn->i.i_namelen = cpu_to_le32(name->len); > - memcpy(rn->i.i_name, name->name, name->len); > + ri = F2FS_INODE(ipage); > + ri->i_namelen = cpu_to_le32(name->len); > + memcpy(ri->i_name, name->name, name->len); > set_page_dirty(ipage); > } > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > index ba91186..1a06f0a 100644 > --- a/fs/f2fs/f2fs.h > +++ b/fs/f2fs/f2fs.h > @@ -498,6 +498,11 @@ static inline struct f2fs_node *F2FS_NODE(struct page *page) > return (struct f2fs_node *)page_address(page); > } > > +static inline struct f2fs_inode *F2FS_INODE(struct page *page) > +{ > + return &((struct f2fs_node *)page_address(page))->i; > +} > + > static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi) > { > return (struct f2fs_nm_info *)(sbi->nm_info); > diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c > index d0eaa9f..a91f451 100644 > --- a/fs/f2fs/inode.c > +++ b/fs/f2fs/inode.c > @@ -67,7 +67,6 @@ static int do_read_inode(struct inode *inode) > struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); > struct f2fs_inode_info *fi = F2FS_I(inode); > struct page *node_page; > - struct f2fs_node *rn; > struct f2fs_inode *ri; > > /* Check if ino is within scope */ > @@ -81,8 +80,7 @@ static int do_read_inode(struct inode *inode) > if (IS_ERR(node_page)) > return PTR_ERR(node_page); > > - rn = F2FS_NODE(node_page); > - ri = &(rn->i); > + ri = F2FS_INODE(node_page); > > inode->i_mode = le16_to_cpu(ri->i_mode); > i_uid_write(inode, le32_to_cpu(ri->i_uid)); > @@ -175,13 +173,11 @@ bad_inode: > > void update_inode(struct inode *inode, struct page *node_page) > { > - struct f2fs_node *rn; > struct f2fs_inode *ri; > > f2fs_wait_on_page_writeback(node_page, NODE, false); > > - rn = F2FS_NODE(node_page); > - ri = &(rn->i); > + ri = F2FS_INODE(node_page); > > ri->i_mode = cpu_to_le16(inode->i_mode); > ri->i_advise = F2FS_I(inode)->i_advise; > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c > index e8fe52d..6fdd88c 100644 > --- a/fs/f2fs/node.c > +++ b/fs/f2fs/node.c > @@ -684,7 +684,7 @@ int truncate_inode_blocks(struct inode *inode, pgoff_t from) > int err = 0, cont = 1; > int level, offset[4], noffset[4]; > unsigned int nofs = 0; > - struct f2fs_node *rn; > + struct f2fs_inode *ri; > struct dnode_of_data dn; > struct page *page; > > @@ -701,7 +701,7 @@ restart: > set_new_dnode(&dn, inode, page, NULL, 0); > unlock_page(page); > > - rn = F2FS_NODE(page); > + ri = F2FS_INODE(page); > switch (level) { > case 0: > case 1: > @@ -711,7 +711,7 @@ restart: > nofs = noffset[1]; > if (!offset[level - 1]) > goto skip_partial; > - err = truncate_partial_nodes(&dn, &rn->i, offset, level); > + err = truncate_partial_nodes(&dn, ri, offset, level); > if (err < 0 && err != -ENOENT) > goto fail; > nofs += 1 + NIDS_PER_BLOCK; > @@ -720,7 +720,7 @@ restart: > nofs = 5 + 2 * NIDS_PER_BLOCK; > if (!offset[level - 1]) > goto skip_partial; > - err = truncate_partial_nodes(&dn, &rn->i, offset, level); > + err = truncate_partial_nodes(&dn, ri, offset, level); > if (err < 0 && err != -ENOENT) > goto fail; > break; > @@ -730,7 +730,7 @@ restart: > > skip_partial: > while (cont) { > - dn.nid = le32_to_cpu(rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK]); > + dn.nid = le32_to_cpu(ri->i_nid[offset[0] - NODE_DIR1_BLOCK]); > switch (offset[0]) { > case NODE_DIR1_BLOCK: > case NODE_DIR2_BLOCK: > @@ -753,14 +753,14 @@ skip_partial: > if (err < 0 && err != -ENOENT) > goto fail; > if (offset[1] == 0 && > - rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK]) { > + ri->i_nid[offset[0] - NODE_DIR1_BLOCK]) { > lock_page(page); > if (unlikely(page->mapping != node_mapping)) { > f2fs_put_page(page, 1); > goto restart; > } > wait_on_page_writeback(page); > - rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; > + ri->i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; > set_page_dirty(page); > unlock_page(page); > } > diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c > index 4d411a2..96e690b6 100644 > --- a/fs/f2fs/recovery.c > +++ b/fs/f2fs/recovery.c > @@ -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) > { > - struct f2fs_node *raw_node = F2FS_NODE(ipage); > - struct f2fs_inode *raw_inode = &(raw_node->i); > + struct f2fs_inode *raw_inode = F2FS_INODE(ipage); > nid_t pino = le32_to_cpu(raw_inode->i_pino); > struct f2fs_dir_entry *de; > struct qstr name; > @@ -105,8 +104,7 @@ out: > > static int recover_inode(struct inode *inode, struct page *node_page) > { > - struct f2fs_node *raw_node = F2FS_NODE(node_page); > - struct f2fs_inode *raw_inode = &(raw_node->i); > + struct f2fs_inode *raw_inode = F2FS_INODE(node_page); > > if (!IS_INODE(node_page)) > return 0; > -- > 1.8.4.474.g128a96c > > > ------------------------------------------------------------------------------ > Rapidly troubleshoot problems before they affect your business. Most IT > organizations don't have a clear picture of how application performance > affects their revenue. With AppDynamics, you get 100% visibility into your > Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] f2fs: introduce F2FS_INODE macro to get f2fs_inode 2013-12-26 9:24 ` [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode Chao Yu @ 2013-12-26 11:37 ` Jaegeuk Kim 0 siblings, 0 replies; 4+ messages in thread From: Jaegeuk Kim @ 2013-12-26 11:37 UTC (permalink / raw) To: Chao Yu; +Cc: linux-fsdevel, linux-kernel, linux-f2fs-devel Hi, Nice catch. :) Change log from v1: o handle recover_inode_page too >From 58bfaf44df58082c72882b235cae611c975537d4 Mon Sep 17 00:00:00 2001 From: Jaegeuk Kim <jaegeuk.kim@samsung.com> Date: Thu, 26 Dec 2013 16:30:41 +0900 Subject: [PATCH] f2fs: introduce F2FS_INODE macro to get f2fs_inode This patch introduces F2FS_INODE that returns struct f2fs_inode * from the inode page. By using this macro, we can remove unnecessary casting codes like below. struct f2fs_inode *ri = &F2FS_NODE(inode_page)->i; -> struct f2fs_inode *ri = F2FS_INODE(inode_page); Reviewed-by: Chao Yu <chao2.yu@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com> --- fs/f2fs/dir.c | 8 ++++---- fs/f2fs/f2fs.h | 5 +++++ fs/f2fs/inode.c | 8 ++------ fs/f2fs/node.c | 30 +++++++++++++++--------------- fs/f2fs/recovery.c | 6 ++---- 5 files changed, 28 insertions(+), 29 deletions(-) diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c index f0b4630..6da77e5 100644 --- a/fs/f2fs/dir.c +++ b/fs/f2fs/dir.c @@ -261,12 +261,12 @@ void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, static void init_dent_inode(const struct qstr *name, struct page *ipage) { - struct f2fs_node *rn; + struct f2fs_inode *ri; /* copy name info. to this inode page */ - rn = F2FS_NODE(ipage); - rn->i.i_namelen = cpu_to_le32(name->len); - memcpy(rn->i.i_name, name->name, name->len); + ri = F2FS_INODE(ipage); + ri->i_namelen = cpu_to_le32(name->len); + memcpy(ri->i_name, name->name, name->len); set_page_dirty(ipage); } diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index ba91186..1a06f0a 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -498,6 +498,11 @@ static inline struct f2fs_node *F2FS_NODE(struct page *page) return (struct f2fs_node *)page_address(page); } +static inline struct f2fs_inode *F2FS_INODE(struct page *page) +{ + return &((struct f2fs_node *)page_address(page))->i; +} + static inline struct f2fs_nm_info *NM_I(struct f2fs_sb_info *sbi) { return (struct f2fs_nm_info *)(sbi->nm_info); diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index d0eaa9f..a91f451 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -67,7 +67,6 @@ static int do_read_inode(struct inode *inode) struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); struct f2fs_inode_info *fi = F2FS_I(inode); struct page *node_page; - struct f2fs_node *rn; struct f2fs_inode *ri; /* Check if ino is within scope */ @@ -81,8 +80,7 @@ static int do_read_inode(struct inode *inode) if (IS_ERR(node_page)) return PTR_ERR(node_page); - rn = F2FS_NODE(node_page); - ri = &(rn->i); + ri = F2FS_INODE(node_page); inode->i_mode = le16_to_cpu(ri->i_mode); i_uid_write(inode, le32_to_cpu(ri->i_uid)); @@ -175,13 +173,11 @@ bad_inode: void update_inode(struct inode *inode, struct page *node_page) { - struct f2fs_node *rn; struct f2fs_inode *ri; f2fs_wait_on_page_writeback(node_page, NODE, false); - rn = F2FS_NODE(node_page); - ri = &(rn->i); + ri = F2FS_INODE(node_page); ri->i_mode = cpu_to_le16(inode->i_mode); ri->i_advise = F2FS_I(inode)->i_advise; diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index e8fe52d..9405a17 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -684,7 +684,7 @@ int truncate_inode_blocks(struct inode *inode, pgoff_t from) int err = 0, cont = 1; int level, offset[4], noffset[4]; unsigned int nofs = 0; - struct f2fs_node *rn; + struct f2fs_inode *ri; struct dnode_of_data dn; struct page *page; @@ -701,7 +701,7 @@ restart: set_new_dnode(&dn, inode, page, NULL, 0); unlock_page(page); - rn = F2FS_NODE(page); + ri = F2FS_INODE(page); switch (level) { case 0: case 1: @@ -711,7 +711,7 @@ restart: nofs = noffset[1]; if (!offset[level - 1]) goto skip_partial; - err = truncate_partial_nodes(&dn, &rn->i, offset, level); + err = truncate_partial_nodes(&dn, ri, offset, level); if (err < 0 && err != -ENOENT) goto fail; nofs += 1 + NIDS_PER_BLOCK; @@ -720,7 +720,7 @@ restart: nofs = 5 + 2 * NIDS_PER_BLOCK; if (!offset[level - 1]) goto skip_partial; - err = truncate_partial_nodes(&dn, &rn->i, offset, level); + err = truncate_partial_nodes(&dn, ri, offset, level); if (err < 0 && err != -ENOENT) goto fail; break; @@ -730,7 +730,7 @@ restart: skip_partial: while (cont) { - dn.nid = le32_to_cpu(rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK]); + dn.nid = le32_to_cpu(ri->i_nid[offset[0] - NODE_DIR1_BLOCK]); switch (offset[0]) { case NODE_DIR1_BLOCK: case NODE_DIR2_BLOCK: @@ -753,14 +753,14 @@ skip_partial: if (err < 0 && err != -ENOENT) goto fail; if (offset[1] == 0 && - rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK]) { + ri->i_nid[offset[0] - NODE_DIR1_BLOCK]) { lock_page(page); if (unlikely(page->mapping != node_mapping)) { f2fs_put_page(page, 1); goto restart; } wait_on_page_writeback(page); - rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; + ri->i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; set_page_dirty(page); unlock_page(page); } @@ -1533,7 +1533,7 @@ void recover_node_page(struct f2fs_sb_info *sbi, struct page *page, int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page) { struct address_space *mapping = sbi->node_inode->i_mapping; - struct f2fs_node *src, *dst; + struct f2fs_inode *src, *dst; nid_t ino = ino_of_node(page); struct node_info old_ni, new_ni; struct page *ipage; @@ -1549,14 +1549,14 @@ int recover_inode_page(struct f2fs_sb_info *sbi, struct page *page) SetPageUptodate(ipage); fill_node_footer(ipage, ino, ino, 0, true); - src = F2FS_NODE(page); - dst = F2FS_NODE(ipage); + src = F2FS_INODE(page); + dst = F2FS_INODE(ipage); - memcpy(dst, src, (unsigned long)&src->i.i_ext - (unsigned long)&src->i); - dst->i.i_size = 0; - dst->i.i_blocks = cpu_to_le64(1); - dst->i.i_links = cpu_to_le32(1); - dst->i.i_xattr_nid = 0; + memcpy(dst, src, (unsigned long)&src->i_ext - (unsigned long)src); + dst->i_size = 0; + dst->i_blocks = cpu_to_le64(1); + dst->i_links = cpu_to_le32(1); + dst->i_xattr_nid = 0; new_ni = old_ni; new_ni.ino = ino; diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c index 4d411a2..96e690b6 100644 --- a/fs/f2fs/recovery.c +++ b/fs/f2fs/recovery.c @@ -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) { - struct f2fs_node *raw_node = F2FS_NODE(ipage); - struct f2fs_inode *raw_inode = &(raw_node->i); + struct f2fs_inode *raw_inode = F2FS_INODE(ipage); nid_t pino = le32_to_cpu(raw_inode->i_pino); struct f2fs_dir_entry *de; struct qstr name; @@ -105,8 +104,7 @@ out: static int recover_inode(struct inode *inode, struct page *node_page) { - struct f2fs_node *raw_node = F2FS_NODE(node_page); - struct f2fs_inode *raw_inode = &(raw_node->i); + struct f2fs_inode *raw_inode = F2FS_INODE(node_page); if (!IS_INODE(node_page)) return 0; -- 1.8.4.474.g128a96c -- Jaegeuk Kim Samsung ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-12-26 11:38 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-12-26 8:17 [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode Jaegeuk Kim 2013-12-26 8:17 ` [PATCH 2/2] f2fs: should put the dnode when NEW_ADDR is detected Jaegeuk Kim 2013-12-26 9:24 ` [PATCH 1/2] f2fs: introduce F2FS_INODE macro to get f2fs_inode Chao Yu 2013-12-26 11:37 ` [PATCH v2] " Jaegeuk Kim
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).