From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Chao Yu <chao2.yu@samsung.com>
Cc: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [PATCH 1/3] f2fs: backup raw_super in sbi
Date: Tue, 15 Dec 2015 14:06:25 -0800 [thread overview]
Message-ID: <20151215220625.GD66113@jaegeuk.local> (raw)
In-Reply-To: <010d01d1371c$c9954530$5cbfcf90$@samsung.com>
On Tue, Dec 15, 2015 at 05:40:51PM +0800, Chao Yu wrote:
> 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.
No problem to merge this patch.
Thanks Chao.
>
> 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 <heyunlei@huawei.com>
> >
> > 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 <heyunlei@huawei.com>
> > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> > Signed-off-by: Chao Yu <chao2.yu@samsung.com>
> > ---
> > 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
>
------------------------------------------------------------------------------
next prev parent reply other threads:[~2015-12-15 22:06 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-15 9:40 [PATCH 1/3] f2fs: backup raw_super in sbi Chao Yu
2015-12-15 22:06 ` Jaegeuk Kim [this message]
-- strict thread matches above, loose matches on Subject: below --
2015-12-15 9:17 Chao Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151215220625.GD66113@jaegeuk.local \
--to=jaegeuk@kernel.org \
--cc=chao2.yu@samsung.com \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).