From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Alex Zhuravlev <Alex.Zhuravlev@Sun.COM>
Cc: Theodore Tso <tytso@MIT.EDU>,
cmm@us.ibm.com, sandeen@redhat.com, linux-ext4@vger.kernel.org
Subject: Re: [PATCH -V2 3/5] ext4: Fix the race between read_block_bitmap and mark_diskspace_used
Date: Mon, 24 Nov 2008 23:42:52 +0530 [thread overview]
Message-ID: <20081124181252.GE8462@skywalker> (raw)
In-Reply-To: <492AEC69.40202@sun.com>
On Mon, Nov 24, 2008 at 09:03:21PM +0300, Alex Zhuravlev wrote:
> Aneesh Kumar K.V wrote:
>> On Mon, Nov 24, 2008 at 07:36:49PM +0300, Alex Zhuravlev wrote:
>>> Aneesh Kumar K.V wrote:
>>>> Ok the changes was not done for this purpose. I need to make sure we
>>>> update bitmap and clear group_desc uninit flag after taking sb_bgl_lock
>>>> That means when we claim blocks we can't use mb_set_bits with
>>>> sb_bgl_lock because we would already be holding it. How about the below
>>>> change
>>> may I have a look at the original patch?
>>
>> http://patchwork.ozlabs.org/patch/10065/
>
> I don't understand how a group can be "uninit" if we do some manipulations
> inside. both allocation and preallocation initialize group first, see in
> ext4_mb_init_cache()
>
With commit c806e68f we do a init_bitmap every time we do a
read_block_bitmap.
To quote the update commit message that i have
ext4: Fix race between read_block_bitmap() and mark_diskspace_used()
We need to make sure we update the block bitmap and clear
EXT4_BG_BLOCK_UNINIT flag with sb_bgl_lock held. We look at
EXT4_BG_BLOCK_UNINIT and reinit the block bitmap each time in
ext4_read_block_bitmap (introduced by commit c806e68f), and this can
race with block allocations in ext4_mb_mark_diskspace_used().
ext4_read_block_bitmap does:
spin_lock(sb_bgl_lock(EXT4_SB(sb), block_group));
if (desc->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
ext4_init_block_bitmap(sb, bh, block_group, desc);
Now on the block allocation side we do
mb_set_bits(sb_bgl_lock(sbi, ac->ac_b_ex.fe_group), bitmap_bh->b_data,
ac->ac_b_ex.fe_start, ac->ac_b_ex.fe_len);
....
spin_lock(sb_bgl_lock(sbi, ac->ac_b_ex.fe_group));
if (gdp->bg_flags & cpu_to_le16(EXT4_BG_BLOCK_UNINIT)) {
gdp->bg_flags &= cpu_to_le16(~EXT4_BG_BLOCK_UNINIT);
ie on allocation we update the bitmap then we take the sb_bgl_lock
and clear the EXT4_BG_BLOCK_UNINIT flag. What can happen is a
parallel ext4_read_block_bitmap can zero out the bitmap in between
the above mb_set_bits and spin_lock(sb_bg_lock..)
The race results in below user visible errors
EXT4-fs error (device sdb1): ext4_mb_release_inode_pa: free 100, pa_free 105
EXT4-fs error (device sdb1): mb_free_blocks: double-free of inode 0's block 50(bit 100 in group 0)
-aneesh
next prev parent reply other threads:[~2008-11-24 18:13 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-21 16:44 [PATCH -V2 1/5] ext4: Remove unneeded code Aneesh Kumar K.V
2008-11-21 16:44 ` [PATCH -V2 2/5] ext4: unlock group before ext4_error Aneesh Kumar K.V
2008-11-21 16:44 ` [PATCH -V2 3/5] ext4: Fix the race between read_block_bitmap and mark_diskspace_used Aneesh Kumar K.V
2008-11-21 16:44 ` [PATCH -V2 4/5] ext4: Use both hi and lo bits of the group desc values Aneesh Kumar K.V
2008-11-21 16:44 ` [PATCH -V2 5/5] ext4: Fix the race between read_inode_bitmap and ext4_new_inode Aneesh Kumar K.V
2008-11-21 17:30 ` Eric Sandeen
2008-11-23 19:26 ` Theodore Tso
2008-11-24 4:05 ` Theodore Tso
2008-11-24 11:15 ` Aneesh Kumar K.V
2008-11-21 17:29 ` [PATCH -V2 4/5] ext4: Use both hi and lo bits of the group desc values Eric Sandeen
2008-11-21 17:41 ` Aneesh Kumar K.V
2008-11-21 17:53 ` Eric Sandeen
2008-11-23 4:09 ` Andreas Dilger
2008-11-24 1:21 ` Theodore Tso
2008-11-24 2:13 ` Theodore Tso
2008-11-24 10:38 ` Aneesh Kumar K.V
2008-11-21 17:22 ` [PATCH -V2 3/5] ext4: Fix the race between read_block_bitmap and mark_diskspace_used Eric Sandeen
2008-11-21 17:31 ` Aneesh Kumar K.V
2008-11-21 17:39 ` Aneesh Kumar K.V
2008-11-21 17:40 ` Eric Sandeen
2008-11-21 17:39 ` Eric Sandeen
2008-11-23 19:02 ` Theodore Tso
2008-11-24 6:40 ` Aneesh Kumar K.V
2008-11-23 14:00 ` Theodore Tso
2008-11-24 7:14 ` Alex Zhuravlev
2008-11-24 11:33 ` Aneesh Kumar K.V
2008-11-24 16:36 ` Alex Zhuravlev
2008-11-24 16:43 ` Aneesh Kumar K.V
2008-11-24 18:03 ` Alex Zhuravlev
2008-11-24 18:12 ` Aneesh Kumar K.V [this message]
2008-11-24 18:17 ` Alex Zhuravlev
2008-11-24 18:21 ` Aneesh Kumar K.V
2008-11-24 18:28 ` Alex Zhuravlev
2008-11-24 18:41 ` Alex Zhuravlev
2008-11-25 14:29 ` Frédéric Bohé
2008-11-25 16:38 ` Alex Zhuravlev
2008-11-23 13:37 ` [PATCH -V2 2/5] ext4: unlock group before ext4_error Theodore Tso
2008-11-23 13:43 ` Theodore Tso
2008-11-23 13:59 ` Aneesh Kumar K.V
2008-11-21 17:20 ` [PATCH -V2 1/5] ext4: Remove unneeded code Eric Sandeen
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=20081124181252.GE8462@skywalker \
--to=aneesh.kumar@linux.vnet.ibm.com \
--cc=Alex.Zhuravlev@Sun.COM \
--cc=cmm@us.ibm.com \
--cc=linux-ext4@vger.kernel.org \
--cc=sandeen@redhat.com \
--cc=tytso@MIT.EDU \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.