Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933941AbbG1K2d (ORCPT ); Tue, 28 Jul 2015 06:28:33 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:34413 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932241AbbG1K0I (ORCPT ); Tue, 28 Jul 2015 06:26:08 -0400 X-AuditID: cbfee61b-f79706d000001b96-ea-55b758bee010 From: Chao Yu To: "'Jaegeuk Kim'" Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net References: <1437870077-46892-1-git-send-email-jaegeuk@kernel.org> <1437870077-46892-2-git-send-email-jaegeuk@kernel.org> In-reply-to: <1437870077-46892-2-git-send-email-jaegeuk@kernel.org> Subject: RE: [f2fs-dev] [PATCH 2/2] f2fs: handle error cases in commit_inmem_pages Date: Tue, 28 Jul 2015 18:25:26 +0800 Message-id: <00e301d0c91f$d303dfc0$790b9f40$@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7bit X-Mailer: Microsoft Outlook 14.0 Thread-index: AQIpV6pP3uJp8GhJxVQThoJEA1KeQAKfPjODnSogKMA= Content-language: zh-cn X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJLMWRmVeSWpSXmKPExsVy+t9jQd19EdtDDWYu4rR4sn4Ws8WlRe4W e/aeZLG4vGsOmwOLx6ZVnWweuxd8ZvL4vEkugDmKyyYlNSezLLVI3y6BK+PatxnsBQtkK7Zu O87cwHhRvIuRk0NCwETi/9nJjBC2mMSFe+vZuhi5OIQEZjFKfHs4lQXCecUo8e5zNzNIFZuA isTyjv9MILaIgJpE774pYDazQKbEhP4X7CC2kEC1xM8nfWwgNqeAs8SPrfPAbGGBEIn3fWvA algEVCVedCxiBbF5BSwlNk4/zQJhC0r8mHyPBWKmlsT6nceh5stLbF7zlhniUgWJHWdfM0Lc YCVx5tJ5NogacYmNR26xTGAUmoVk1Cwko2YhGTULScsCRpZVjBKpBckFxUnpuUZ5qeV6xYm5 xaV56XrJ+bmbGMER8Ex6B+PhXe6HGAU4GJV4eF9s2BYqxJpYVlyZe4hRgoNZSYT3j+H2UCHe lMTKqtSi/Pii0pzU4kOM0hwsSuK8+iabQoUE0hNLUrNTUwtSi2CyTBycUg2MtfnzN1tcNHxn ac3Gc/laA/OdnBVd/MVJW5XiTjSyLe3hPHpRvVCDd5+hwXTm6tlsLl7tBQ/MNe9W/lDsWxPf 7jTB0E9q4nztGZV3wpMNX+f+WXG38vLzqmbT5sb4xf7HhXsu/WJQ0fnSwfhj/Vm7qx2s/nZX TRMyrvf78736Ma1vVt81kdlKLMUZiYZazEXFiQAFmXAwfAIAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3875 Lines: 119 Hi Jaegeuk, > -----Original Message----- > From: Jaegeuk Kim [mailto:jaegeuk@kernel.org] > Sent: Sunday, July 26, 2015 8:21 AM > To: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org; > linux-f2fs-devel@lists.sourceforge.net > Cc: Jaegeuk Kim > Subject: [f2fs-dev] [PATCH 2/2] f2fs: handle error cases in commit_inmem_pages > > This patch adds to handle error cases in commit_inmem_pages. > If an error occurs, it stops to write the pages and return the error right > away. > > Signed-off-by: Jaegeuk Kim > --- > fs/f2fs/f2fs.h | 2 +- > fs/f2fs/file.c | 6 ++++-- > fs/f2fs/segment.c | 10 ++++++++-- > 3 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > index e73f2e2..58b05b5 100644 > --- a/fs/f2fs/f2fs.h > +++ b/fs/f2fs/f2fs.h > @@ -1697,7 +1697,7 @@ void destroy_node_manager_caches(void); > * segment.c > */ > void register_inmem_page(struct inode *, struct page *); > -void commit_inmem_pages(struct inode *, bool); > +int commit_inmem_pages(struct inode *, bool); > void f2fs_balance_fs(struct f2fs_sb_info *); > void f2fs_balance_fs_bg(struct f2fs_sb_info *); > int f2fs_issue_flush(struct f2fs_sb_info *); > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index 25d1a2f..a2b3656 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -1358,7 +1358,9 @@ static int f2fs_ioc_commit_atomic_write(struct file *filp) > > if (f2fs_is_atomic_file(inode)) { > clear_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE); > - commit_inmem_pages(inode, false); > + ret = commit_inmem_pages(inode, false); > + if (ret) > + return ret; > } > > ret = f2fs_sync_file(filp, 0, LLONG_MAX, 0); > @@ -1418,7 +1420,7 @@ static int f2fs_ioc_abort_volatile_write(struct file *filp) > > if (f2fs_is_atomic_file(inode)) { > clear_inode_flag(F2FS_I(inode), FI_ATOMIC_FILE); > - commit_inmem_pages(inode, false); > + commit_inmem_pages(inode, true); > } > > if (f2fs_is_volatile_file(inode)) > diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c > index f7bfc3b..509a2c4 100644 > --- a/fs/f2fs/segment.c > +++ b/fs/f2fs/segment.c > @@ -227,7 +227,7 @@ retry: > trace_f2fs_register_inmem_page(page, INMEM); > } > > -void commit_inmem_pages(struct inode *inode, bool abort) > +int commit_inmem_pages(struct inode *inode, bool abort) > { > struct f2fs_sb_info *sbi = F2FS_I_SB(inode); > struct f2fs_inode_info *fi = F2FS_I(inode); > @@ -239,6 +239,7 @@ void commit_inmem_pages(struct inode *inode, bool abort) > .rw = WRITE_SYNC | REQ_PRIO, > .encrypted_page = NULL, > }; > + int err = 0; > > /* > * The abort is true only when f2fs_evict_inode is called. > @@ -263,8 +264,12 @@ void commit_inmem_pages(struct inode *inode, bool abort) > inode_dec_dirty_pages(inode); > trace_f2fs_commit_inmem_page(cur->page, INMEM); > fio.page = cur->page; > - do_write_data_page(&fio); > + err = do_write_data_page(&fio); > submit_bio = true; > + if (err) { > + unlock_page(cur->page); Shouldn't we invoke f2fs_put_page(,1) here? > + break; > + } > } > f2fs_put_page(cur->page, 1); > } else { > @@ -283,6 +288,7 @@ void commit_inmem_pages(struct inode *inode, bool abort) > if (submit_bio) > f2fs_submit_merged_bio(sbi, DATA, WRITE); > } > + return err; > } > > /* > -- > 2.1.1 > > > ------------------------------------------------------------------------------ > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/