* Possible race in btrfs
@ 2010-03-24 4:20 Abhinav Duggal
2010-03-24 13:47 ` Josef Bacik
0 siblings, 1 reply; 2+ messages in thread
From: Abhinav Duggal @ 2010-03-24 4:20 UTC (permalink / raw)
To: linux-btrfs
Hi all,
It seems like there is a possible race on delalloc_bytes in btrfs in
kernel 2.6.33.Please examine this issue and let me know if this is a
problem or not.The race could occur between stat system call and
writeback kernel thread.
The lines are
fs/btrfs/inode.c 5422
fs/btrfs/inode.c 1378
The stack traces are
For file line fs/btrfs/inode.c 5422
btrfs_getattr+0x141/0x15e
vfs_getattr+0x47/0xf4
vfs_fstatat+0x43/0x5a
vfs_stat+0x16/0x18
sys_newstat+0x3d/0x75
system_call_fastpath+0x16/0x1b
And for file line fs/btrfs/inode.c 1378
btrfs_clear_bit_hook+0xcc1/0x10f2
clear_state_bit+0x4db/0xa89
clear_extent_bit+0x9e1/0xc86
extent_clear_unlock_delalloc+0x8c/0x1d8
cow_file_range+0x1356/0x1432
run_delalloc_range+0x263/0x1702
__extent_writepage+0x2c4/0x15a8
extent_write_cache_pages.clone.0+0x211/0x33d
extent_writepages+0x243/0x260
btrfs_writepages+0x87/0x92
do_writepages+0x1c/0x25
writeback_single_inode+0xe2/0x24c
writeback_inodes_wb+0x374/0x48d
wb_writeback+0x121/0x1f6
wb_do_writeback+0x147/0x159
bdi_writeback_task+0x3a/0xaa
bdi_start_fn+0x63/0xc7
kthread+0x7a/0x82
kernel_thread_helper+0x4/0x10
The write to delalloc_bytes in the function btrfs_clear_bit_hook is
protected by the spin_lock delalloc_lock whereas the read is not.The
write is not atomic so the read could return some old value.
I am not sure what would be the implication of this?Is it ok if stat
system call returns some value which is not consistent with rest of
the fields? If not then is it better to make this field as atomic_t?
I am looking for data races in btrfs and I discovered this using some
kind of dynamic analysis.
Thanks a lot.
With Regards,
Abhinav Duggal
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Possible race in btrfs
2010-03-24 4:20 Possible race in btrfs Abhinav Duggal
@ 2010-03-24 13:47 ` Josef Bacik
0 siblings, 0 replies; 2+ messages in thread
From: Josef Bacik @ 2010-03-24 13:47 UTC (permalink / raw)
To: Abhinav Duggal; +Cc: linux-btrfs
On Wed, 24 Mar 2010 00:20:25 -0400
Abhinav Duggal <abhinavduggal@gmail.com> wrote:
> Hi all,
> It seems like there is a possible race on delalloc_bytes in btrfs in
> kernel 2.6.33.Please examine this issue and let me know if this is a
> problem or not.The race could occur between stat system call and
> writeback kernel thread.
> The lines are
> fs/btrfs/inode.c 5422
> fs/btrfs/inode.c 1378
>
> The stack traces are
>
> For file line fs/btrfs/inode.c 5422
>
> btrfs_getattr+0x141/0x15e
> vfs_getattr+0x47/0xf4
> vfs_fstatat+0x43/0x5a
> vfs_stat+0x16/0x18
> sys_newstat+0x3d/0x75
> system_call_fastpath+0x16/0x1b
>
> And for file line fs/btrfs/inode.c 1378
>
> btrfs_clear_bit_hook+0xcc1/0x10f2
> clear_state_bit+0x4db/0xa89
> clear_extent_bit+0x9e1/0xc86
> extent_clear_unlock_delalloc+0x8c/0x1d8
> cow_file_range+0x1356/0x1432
> run_delalloc_range+0x263/0x1702
> __extent_writepage+0x2c4/0x15a8
> extent_write_cache_pages.clone.0+0x211/0x33d
> extent_writepages+0x243/0x260
> btrfs_writepages+0x87/0x92
> do_writepages+0x1c/0x25
> writeback_single_inode+0xe2/0x24c
> writeback_inodes_wb+0x374/0x48d
> wb_writeback+0x121/0x1f6
> wb_do_writeback+0x147/0x159
> bdi_writeback_task+0x3a/0xaa
> bdi_start_fn+0x63/0xc7
> kthread+0x7a/0x82
> kernel_thread_helper+0x4/0x10
>
> The write to delalloc_bytes in the function btrfs_clear_bit_hook is
> protected by the spin_lock delalloc_lock whereas the read is not.The
> write is not atomic so the read could return some old value.
>
> I am not sure what would be the implication of this?Is it ok if stat
> system call returns some value which is not consistent with rest of
> the fields? If not then is it better to make this field as atomic_t?
> I am looking for data races in btrfs and I discovered this using some
> kind of dynamic analysis.
> Thanks a lot.
>
Yeah you could race, but its getattr. We could add the locking, but its a
global lock, and its just to tell the user how big the file is, so its not
terribly important. I think it's worth the tradeoff for a little possible
inaccuracy vs. creating more lock contention. Thanks,
Josef
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-03-24 13:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-24 4:20 Possible race in btrfs Abhinav Duggal
2010-03-24 13:47 ` Josef Bacik
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).