diff options
author | Chris Mason <chris.mason@oracle.com> | 2010-03-15 10:21:30 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2010-03-15 11:00:15 -0400 |
commit | 5ff7ba3a797a8ffd5299b8477df2dca3c3ebd34e (patch) | |
tree | 598f33540071cd31bd7738b5d6246bfbaa0d9b3b /fs/btrfs | |
parent | a343832f1a55c74791a8a37053fc02ad80640710 (diff) |
Btrfs: don't look at bio flags after submit_bio
After callling submit_bio, the bio can be freed at any time. The
btrfs submission thread helper was checking the bio flags too late,
which might not give the correct answer.
When CONFIG_DEBUG_PAGE_ALLOC is turned on, it can lead to oopsen.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/volumes.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 4053fc44d2cf..9df8e3f1ccab 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
@@ -256,13 +256,13 @@ loop_lock: | |||
256 | wake_up(&fs_info->async_submit_wait); | 256 | wake_up(&fs_info->async_submit_wait); |
257 | 257 | ||
258 | BUG_ON(atomic_read(&cur->bi_cnt) == 0); | 258 | BUG_ON(atomic_read(&cur->bi_cnt) == 0); |
259 | submit_bio(cur->bi_rw, cur); | ||
260 | num_run++; | ||
261 | batch_run++; | ||
262 | 259 | ||
263 | if (bio_rw_flagged(cur, BIO_RW_SYNCIO)) | 260 | if (bio_rw_flagged(cur, BIO_RW_SYNCIO)) |
264 | num_sync_run++; | 261 | num_sync_run++; |
265 | 262 | ||
263 | submit_bio(cur->bi_rw, cur); | ||
264 | num_run++; | ||
265 | batch_run++; | ||
266 | if (need_resched()) { | 266 | if (need_resched()) { |
267 | if (num_sync_run) { | 267 | if (num_sync_run) { |
268 | blk_run_backing_dev(bdi, NULL); | 268 | blk_run_backing_dev(bdi, NULL); |