diff options
Diffstat (limited to 'fs/btrfs/disk-io.c')
| -rw-r--r-- | fs/btrfs/disk-io.c | 56 | 
1 files changed, 31 insertions, 25 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index d0ed9e664f7d..a1d36e62179c 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -39,7 +39,6 @@  #include "btrfs_inode.h"  #include "volumes.h"  #include "print-tree.h" -#include "async-thread.h"  #include "locking.h"  #include "tree-log.h"  #include "free-space-cache.h" @@ -693,35 +692,41 @@ static void end_workqueue_bio(struct bio *bio, int err)  {  	struct end_io_wq *end_io_wq = bio->bi_private;  	struct btrfs_fs_info *fs_info; +	struct btrfs_workqueue *wq; +	btrfs_work_func_t func;  	fs_info = end_io_wq->info;  	end_io_wq->error = err; -	btrfs_init_work(&end_io_wq->work, end_workqueue_fn, NULL, NULL);  	if (bio->bi_rw & REQ_WRITE) { -		if (end_io_wq->metadata == BTRFS_WQ_ENDIO_METADATA) -			btrfs_queue_work(fs_info->endio_meta_write_workers, -					 &end_io_wq->work); -		else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_FREE_SPACE) -			btrfs_queue_work(fs_info->endio_freespace_worker, -					 &end_io_wq->work); -		else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56) -			btrfs_queue_work(fs_info->endio_raid56_workers, -					 &end_io_wq->work); -		else -			btrfs_queue_work(fs_info->endio_write_workers, -					 &end_io_wq->work); +		if (end_io_wq->metadata == BTRFS_WQ_ENDIO_METADATA) { +			wq = fs_info->endio_meta_write_workers; +			func = btrfs_endio_meta_write_helper; +		} else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_FREE_SPACE) { +			wq = fs_info->endio_freespace_worker; +			func = btrfs_freespace_write_helper; +		} else if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56) { +			wq = fs_info->endio_raid56_workers; +			func = btrfs_endio_raid56_helper; +		} else { +			wq = fs_info->endio_write_workers; +			func = btrfs_endio_write_helper; +		}  	} else { -		if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56) -			btrfs_queue_work(fs_info->endio_raid56_workers, -					 &end_io_wq->work); -		else if (end_io_wq->metadata) -			btrfs_queue_work(fs_info->endio_meta_workers, -					 &end_io_wq->work); -		else -			btrfs_queue_work(fs_info->endio_workers, -					 &end_io_wq->work); +		if (end_io_wq->metadata == BTRFS_WQ_ENDIO_RAID56) { +			wq = fs_info->endio_raid56_workers; +			func = btrfs_endio_raid56_helper; +		} else if (end_io_wq->metadata) { +			wq = fs_info->endio_meta_workers; +			func = btrfs_endio_meta_helper; +		} else { +			wq = fs_info->endio_workers; +			func = btrfs_endio_helper; +		}  	} + +	btrfs_init_work(&end_io_wq->work, func, end_workqueue_fn, NULL, NULL); +	btrfs_queue_work(wq, &end_io_wq->work);  }  /* @@ -828,7 +833,7 @@ int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode,  	async->submit_bio_start = submit_bio_start;  	async->submit_bio_done = submit_bio_done; -	btrfs_init_work(&async->work, run_one_async_start, +	btrfs_init_work(&async->work, btrfs_worker_helper, run_one_async_start,  			run_one_async_done, run_one_async_free);  	async->bio_flags = bio_flags; @@ -3450,7 +3455,8 @@ static int write_all_supers(struct btrfs_root *root, int max_mirrors)  		btrfs_set_stack_device_generation(dev_item, 0);  		btrfs_set_stack_device_type(dev_item, dev->type);  		btrfs_set_stack_device_id(dev_item, dev->devid); -		btrfs_set_stack_device_total_bytes(dev_item, dev->total_bytes); +		btrfs_set_stack_device_total_bytes(dev_item, +						   dev->disk_total_bytes);  		btrfs_set_stack_device_bytes_used(dev_item, dev->bytes_used);  		btrfs_set_stack_device_io_align(dev_item, dev->io_align);  		btrfs_set_stack_device_io_width(dev_item, dev->io_width);  |