Browse Source

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>
Chris Mason 15 năm trước cách đây
mục cha
commit
5ff7ba3a79
1 tập tin đã thay đổi với 3 bổ sung3 xóa
  1. 3 3
      fs/btrfs/volumes.c

+ 3 - 3
fs/btrfs/volumes.c

@@ -256,13 +256,13 @@ loop_lock:
 			wake_up(&fs_info->async_submit_wait);
 			wake_up(&fs_info->async_submit_wait);
 
 
 		BUG_ON(atomic_read(&cur->bi_cnt) == 0);
 		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))
 		if (bio_rw_flagged(cur, BIO_RW_SYNCIO))
 			num_sync_run++;
 			num_sync_run++;
 
 
+		submit_bio(cur->bi_rw, cur);
+		num_run++;
+		batch_run++;
 		if (need_resched()) {
 		if (need_resched()) {
 			if (num_sync_run) {
 			if (num_sync_run) {
 				blk_run_backing_dev(bdi, NULL);
 				blk_run_backing_dev(bdi, NULL);