Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964856AbbLOJnf (ORCPT ); Tue, 15 Dec 2015 04:43:35 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:46409 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964888AbbLOJlh (ORCPT ); Tue, 15 Dec 2015 04:41:37 -0500 X-AuditID: cbfee61a-f79266d000003652-a0-566fe04f89f1 From: Chao Yu To: Jaegeuk Kim , Yunlei He Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org References: In-reply-to: Subject: RE: [PATCH 1/3] f2fs: backup raw_super in sbi Date: Tue, 15 Dec 2015 17:40:51 +0800 Message-id: <010d01d1371c$c9954530$5cbfcf90$@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: AdE3F82kGufPxPCnQPu7qRY4IzmsWAABB74Q Content-language: zh-cn X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNLMWRmVeSWpSXmKPExsVy+t9jQV3/B/lhBlMm61hsPR5j8WT9LGaL S4vcLS7vmsPmwOLRcuQtq8emVZ1sHrsXfGby+LxJLoAlissmJTUnsyy1SN8ugSvj7661zAV9 0hWzTlxlaWC8JdrFyMkhIWAi0fJnBzuELSZx4d56ti5GLg4hgVmMEhs2LmEBSQgJvGKUeHlR DcRmE1CRWN7xnwnEFhFwlZje18EMYjMLeEg0dnxn7WLkAKrnlljdHAQS5hTgkVj3pxOsRFjA TGLptR5WEJtFQFVi+rRfjCA2r4ClRN/ORnYIW1Dix+R7LBAjtSTW7zzOBGHLS2xe85YZ4k4F iR1nXzNCnGAk8aqhnRWiRlxi45FbLBMYhWYhGTULyahZSEbNQtKygJFlFaNEakFyQXFSeq5h Xmq5XnFibnFpXrpecn7uJkZwFDyT2sF4cJf7IUYBDkYlHt4FzPlhQqyJZcWVuYcYJTiYlUR4 s28BhXhTEiurUovy44tKc1KLDzFKc7AoifPWXooMExJITyxJzU5NLUgtgskycXBKNTAW7e+U usQ4j0Etbt3H6jTHOyk7D9r4370UwcSwYP1TnjUzLT//O97yeN+zNbIdlydcm22puIEp92Ji tJHDMuG1mtN6UownJMZsiHF+IBvw1n9FFYuN2+kHEg2MYexLI12zVP587pb2+7vrRJFnzvF5 e976/u+tFHVf8rVQbsqiqLUuv3NnZmxXYinOSDTUYi4qTgQAIP3HDn4CAAA= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3600 Lines: 120 Hi Jaegeuk, Yunlei, I help do some edits and send it out as my patch's base. :) But if you want to send patch by yourself, please ignore this patch. Thanks, > -----Original Message----- > From: Chao Yu [mailto:chao2.yu@samsung.com] > Sent: Tuesday, December 15, 2015 5:17 PM > To: Jaegeuk Kim (jaegeuk@kernel.org); Yunlei He (heyunlei@huawei.com) > Cc: linux-f2fs-devel@lists.sourceforge.net; linux-kernel@vger.kernel.org > Subject: [PATCH 1/3] f2fs: backup raw_super in sbi > > From: Yunlei He > > f2fs use fields of f2fs_super_block struct directly in a grabbed buffer. > > Once the buffer happen to be destroyed (e.g. through dd), it may bring > in unpredictable effect on f2fs. > > This patch fixes to allocate additional buffer to store datas of super > block rather than using grabbed block buffer directly. > > Signed-off-by: Yunlei He > Signed-off-by: Jaegeuk Kim > Signed-off-by: Chao Yu > --- > fs/f2fs/super.c | 19 +++++++++++++++---- > 1 file changed, 15 insertions(+), 4 deletions(-) > > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c > index 694e092..a6eb79a 100644 > --- a/fs/f2fs/super.c > +++ b/fs/f2fs/super.c > @@ -578,6 +578,7 @@ static void f2fs_put_super(struct super_block *sb) > > sb->s_fs_info = NULL; > brelse(sbi->raw_super_buf); > + kfree(sbi->raw_super); > kfree(sbi); > } > > @@ -1153,6 +1154,9 @@ static int read_raw_super_block(struct super_block *sb, > struct f2fs_super_block *super; > int err = 0; > > + super = kzalloc(sizeof(struct f2fs_super_block), GFP_KERNEL); > + if (!super) > + return -ENOMEM; > retry: > buffer = sb_bread(sb, block); > if (!buffer) { > @@ -1168,8 +1172,7 @@ retry: > } > } > > - super = (struct f2fs_super_block *) > - ((char *)(buffer)->b_data + F2FS_SUPER_OFFSET); > + memcpy(super, buffer->b_data + F2FS_SUPER_OFFSET, sizeof(*super)); > > /* sanity checking of raw super */ > if (sanity_check_raw_super(sb, super)) { > @@ -1203,14 +1206,17 @@ retry: > > out: > /* No valid superblock */ > - if (!*raw_super) > + if (!*raw_super) { > + kfree(super); > return err; > + } > > return 0; > } > > int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover) > { > + struct f2fs_super_block *super = F2FS_RAW_SUPER(sbi); > struct buffer_head *sbh = sbi->raw_super_buf; > struct buffer_head *bh; > int err; > @@ -1221,7 +1227,7 @@ int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover) > return -EIO; > > lock_buffer(bh); > - memcpy(bh->b_data, sbh->b_data, sbh->b_size); > + memcpy(bh->b_data + F2FS_SUPER_OFFSET, super, sizeof(*super)); > WARN_ON(sbh->b_size != F2FS_BLKSIZE); > set_buffer_uptodate(bh); > set_buffer_dirty(bh); > @@ -1237,6 +1243,10 @@ int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover) > > /* write current valid superblock */ > lock_buffer(sbh); > + if (memcmp(sbh->b_data + F2FS_SUPER_OFFSET, super, sizeof(*super))) { > + f2fs_msg(sbi->sb, KERN_INFO, "Write modified valid superblock"); > + memcpy(sbh->b_data + F2FS_SUPER_OFFSET, super, sizeof(*super)); > + } > set_buffer_dirty(sbh); > unlock_buffer(sbh); > > @@ -1513,6 +1523,7 @@ free_options: > kfree(options); > free_sb_buf: > brelse(raw_super_buf); > + kfree(raw_super); > free_sbi: > kfree(sbi); > > -- > 2.6.3 -- 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/