Btrfs: don't look at bio flags after submit_bio
authorChris Mason <chris.mason@oracle.com>
Mon, 15 Mar 2010 14:21:30 +0000 (10:21 -0400)
committerChris Mason <chris.mason@oracle.com>
Mon, 15 Mar 2010 15:00:15 +0000 (11:00 -0400)
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>
fs/btrfs/volumes.c

index 4053fc44d2cf2a18523c682e9a0e0e34bb2a4523..9df8e3f1ccabea1daa2e3d4fd93fdb6424fa4555 100644 (file)
@@ -256,13 +256,13 @@ loop_lock:
                        wake_up(&fs_info->async_submit_wait);
 
                BUG_ON(atomic_read(&cur->bi_cnt) == 0);
-               submit_bio(cur->bi_rw, cur);
-               num_run++;
-               batch_run++;
 
                if (bio_rw_flagged(cur, BIO_RW_SYNCIO))
                        num_sync_run++;
 
+               submit_bio(cur->bi_rw, cur);
+               num_run++;
+               batch_run++;
                if (need_resched()) {
                        if (num_sync_run) {
                                blk_run_backing_dev(bdi, NULL);