diff options
Diffstat (limited to 'drivers/md/md.c')
| -rw-r--r-- | drivers/md/md.c | 51 | 
1 files changed, 13 insertions, 38 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index f567f536b529..96b28f6d025c 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -199,7 +199,7 @@ static int rdevs_init_serial(struct mddev *mddev)  static int rdev_need_serial(struct md_rdev *rdev)  {  	return (rdev && rdev->mddev->bitmap_info.max_write_behind > 0 && -		rdev->bdev->bd_queue->nr_hw_queues != 1 && +		rdev->bdev->bd_disk->queue->nr_hw_queues != 1 &&  		test_bit(WriteMostly, &rdev->flags));  } @@ -463,7 +463,7 @@ check_suspended:  }  EXPORT_SYMBOL(md_handle_request); -static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio) +static blk_qc_t md_submit_bio(struct bio *bio)  {  	const int rw = bio_data_dir(bio);  	const int sgrp = op_stat_group(bio_op(bio)); @@ -475,7 +475,7 @@ static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio)  		return BLK_QC_T_NONE;  	} -	blk_queue_split(q, &bio); +	blk_queue_split(&bio);  	if (mddev == NULL || mddev->pers == NULL) {  		bio_io_error(bio); @@ -549,26 +549,6 @@ void mddev_resume(struct mddev *mddev)  }  EXPORT_SYMBOL_GPL(mddev_resume); -int mddev_congested(struct mddev *mddev, int bits) -{ -	struct md_personality *pers = mddev->pers; -	int ret = 0; - -	rcu_read_lock(); -	if (mddev->suspended) -		ret = 1; -	else if (pers && pers->congested) -		ret = pers->congested(mddev, bits); -	rcu_read_unlock(); -	return ret; -} -EXPORT_SYMBOL_GPL(mddev_congested); -static int md_congested(void *data, int bits) -{ -	struct mddev *mddev = data; -	return mddev_congested(mddev, bits); -} -  /*   * Generic flush handling for md   */ @@ -5641,7 +5621,7 @@ static int md_alloc(dev_t dev, char *name)  		mddev->hold_active = UNTIL_STOP;  	error = -ENOMEM; -	mddev->queue = blk_alloc_queue(md_make_request, NUMA_NO_NODE); +	mddev->queue = blk_alloc_queue(NUMA_NO_NODE);  	if (!mddev->queue)  		goto abort; @@ -5670,6 +5650,7 @@ static int md_alloc(dev_t dev, char *name)  	 * remove it now.  	 */  	disk->flags |= GENHD_FL_EXT_DEVT; +	disk->events |= DISK_EVENT_MEDIA_CHANGE;  	mddev->gendisk = disk;  	/* As soon as we call add_disk(), another thread could get  	 * through to md_open, so make sure it doesn't get too far @@ -5964,8 +5945,6 @@ int md_run(struct mddev *mddev)  			blk_queue_flag_set(QUEUE_FLAG_NONROT, mddev->queue);  		else  			blk_queue_flag_clear(QUEUE_FLAG_NONROT, mddev->queue); -		mddev->queue->backing_dev_info->congested_data = mddev; -		mddev->queue->backing_dev_info->congested_fn = md_congested;  	}  	if (pers->sync_request) {  		if (mddev->kobj.sd && @@ -6350,7 +6329,6 @@ static int do_md_stop(struct mddev *mddev, int mode,  		__md_stop_writes(mddev);  		__md_stop(mddev); -		mddev->queue->backing_dev_info->congested_fn = NULL;  		/* tell userspace to handle 'inactive' */  		sysfs_notify_dirent_safe(mddev->sysfs_state); @@ -7806,23 +7784,21 @@ static void md_release(struct gendisk *disk, fmode_t mode)  	mddev_put(mddev);  } -static int md_media_changed(struct gendisk *disk) -{ -	struct mddev *mddev = disk->private_data; - -	return mddev->changed; -} - -static int md_revalidate(struct gendisk *disk) +static unsigned int md_check_events(struct gendisk *disk, unsigned int clearing)  {  	struct mddev *mddev = disk->private_data; +	unsigned int ret = 0; +	if (mddev->changed) +		ret = DISK_EVENT_MEDIA_CHANGE;  	mddev->changed = 0; -	return 0; +	return ret;  } +  static const struct block_device_operations md_fops =  {  	.owner		= THIS_MODULE, +	.submit_bio	= md_submit_bio,  	.open		= md_open,  	.release	= md_release,  	.ioctl		= md_ioctl, @@ -7830,8 +7806,7 @@ static const struct block_device_operations md_fops =  	.compat_ioctl	= md_compat_ioctl,  #endif  	.getgeo		= md_getgeo, -	.media_changed  = md_media_changed, -	.revalidate_disk= md_revalidate, +	.check_events	= md_check_events,  };  static int md_thread(void *arg)  | 
