diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-12 17:13:23 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-12 17:13:23 -0500 |
commit | 3e12cefbe143b4947171ff92dd50024c4841e291 (patch) | |
tree | f58ec23a4092576ed08843cca5f5443a32106bd1 /drivers/scsi | |
parent | 6bec0035286119eefc32a5b1102127e6a4032cb2 (diff) | |
parent | d427e3c82ef4fc5fbb22c0cef0b040e6767b1028 (diff) |
Merge branch 'for-3.20/core' of git://git.kernel.dk/linux-block
Pull core block IO changes from Jens Axboe:
"This contains:
- A series from Christoph that cleans up and refactors various parts
of the REQ_BLOCK_PC handling. Contributions in that series from
Dongsu Park and Kent Overstreet as well.
- CFQ:
- A bug fix for cfq for realtime IO scheduling from Jeff Moyer.
- A stable patch fixing a potential crash in CFQ in OOM
situations. From Konstantin Khlebnikov.
- blk-mq:
- Add support for tag allocation policies, from Shaohua. This is
a prep patch enabling libata (and other SCSI parts) to use the
blk-mq tagging, instead of rolling their own.
- Various little tweaks from Keith and Mike, in preparation for
DM blk-mq support.
- Minor little fixes or tweaks from me.
- A double free error fix from Tony Battersby.
- The partition 4k issue fixes from Matthew and Boaz.
- Add support for zero+unprovision for blkdev_issue_zeroout() from
Martin"
* 'for-3.20/core' of git://git.kernel.dk/linux-block: (27 commits)
block: remove unused function blk_bio_map_sg
block: handle the null_mapped flag correctly in blk_rq_map_user_iov
blk-mq: fix double-free in error path
block: prevent request-to-request merging with gaps if not allowed
blk-mq: make blk_mq_run_queues() static
dm: fix multipath regression due to initializing wrong request
cfq-iosched: handle failure of cfq group allocation
block: Quiesce zeroout wrapper
block: rewrite and split __bio_copy_iov()
block: merge __bio_map_user_iov into bio_map_user_iov
block: merge __bio_map_kern into bio_map_kern
block: pass iov_iter to the BLOCK_PC mapping functions
block: add a helper to free bio bounce buffer pages
block: use blk_rq_map_user_iov to implement blk_rq_map_user
block: simplify bio_map_kern
block: mark blk-mq devices as stackable
block: keep established cmd_flags when cloning into a blk-mq request
block: add blk-mq support to blk_insert_cloned_request()
block: require blk_rq_prep_clone() be given an initialized clone request
blk-mq: add tag allocation policy
...
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/scsi_lib.c | 2 | ||||
-rw-r--r-- | drivers/scsi/scsi_scan.c | 3 | ||||
-rw-r--r-- | drivers/scsi/sg.c | 15 |
3 files changed, 10 insertions, 10 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 17bb541f7cc2..54d7a6cbb98a 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
@@ -2197,6 +2197,8 @@ int scsi_mq_setup_tags(struct Scsi_Host *shost) | |||
2197 | shost->tag_set.cmd_size = cmd_size; | 2197 | shost->tag_set.cmd_size = cmd_size; |
2198 | shost->tag_set.numa_node = NUMA_NO_NODE; | 2198 | shost->tag_set.numa_node = NUMA_NO_NODE; |
2199 | shost->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE; | 2199 | shost->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_SG_MERGE; |
2200 | shost->tag_set.flags |= | ||
2201 | BLK_ALLOC_POLICY_TO_MQ_FLAG(shost->hostt->tag_alloc_policy); | ||
2200 | shost->tag_set.driver_data = shost; | 2202 | shost->tag_set.driver_data = shost; |
2201 | 2203 | ||
2202 | return blk_mq_alloc_tag_set(&shost->tag_set); | 2204 | return blk_mq_alloc_tag_set(&shost->tag_set); |
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c index 0deb385ad4d6..9c0a520d933c 100644 --- a/drivers/scsi/scsi_scan.c +++ b/drivers/scsi/scsi_scan.c | |||
@@ -277,7 +277,8 @@ static struct scsi_device *scsi_alloc_sdev(struct scsi_target *starget, | |||
277 | if (!shost_use_blk_mq(sdev->host) && | 277 | if (!shost_use_blk_mq(sdev->host) && |
278 | (shost->bqt || shost->hostt->use_blk_tags)) { | 278 | (shost->bqt || shost->hostt->use_blk_tags)) { |
279 | blk_queue_init_tags(sdev->request_queue, | 279 | blk_queue_init_tags(sdev->request_queue, |
280 | sdev->host->cmd_per_lun, shost->bqt); | 280 | sdev->host->cmd_per_lun, shost->bqt, |
281 | shost->hostt->tag_alloc_policy); | ||
281 | } | 282 | } |
282 | scsi_change_queue_depth(sdev, sdev->host->cmd_per_lun); | 283 | scsi_change_queue_depth(sdev, sdev->host->cmd_per_lun); |
283 | 284 | ||
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index a668c88ea150..0cbc1fb45f10 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
@@ -1719,22 +1719,19 @@ sg_start_req(Sg_request *srp, unsigned char *cmd) | |||
1719 | } | 1719 | } |
1720 | 1720 | ||
1721 | if (iov_count) { | 1721 | if (iov_count) { |
1722 | int len, size = sizeof(struct sg_iovec) * iov_count; | 1722 | int size = sizeof(struct iovec) * iov_count; |
1723 | struct iovec *iov; | 1723 | struct iovec *iov; |
1724 | struct iov_iter i; | ||
1724 | 1725 | ||
1725 | iov = memdup_user(hp->dxferp, size); | 1726 | iov = memdup_user(hp->dxferp, size); |
1726 | if (IS_ERR(iov)) | 1727 | if (IS_ERR(iov)) |
1727 | return PTR_ERR(iov); | 1728 | return PTR_ERR(iov); |
1728 | 1729 | ||
1729 | len = iov_length(iov, iov_count); | 1730 | iov_iter_init(&i, rw, iov, iov_count, |
1730 | if (hp->dxfer_len < len) { | 1731 | min_t(size_t, hp->dxfer_len, |
1731 | iov_count = iov_shorten(iov, iov_count, hp->dxfer_len); | 1732 | iov_length(iov, iov_count))); |
1732 | len = hp->dxfer_len; | ||
1733 | } | ||
1734 | 1733 | ||
1735 | res = blk_rq_map_user_iov(q, rq, md, (struct sg_iovec *)iov, | 1734 | res = blk_rq_map_user_iov(q, rq, md, &i, GFP_ATOMIC); |
1736 | iov_count, | ||
1737 | len, GFP_ATOMIC); | ||
1738 | kfree(iov); | 1735 | kfree(iov); |
1739 | } else | 1736 | } else |
1740 | res = blk_rq_map_user(q, rq, md, hp->dxferp, | 1737 | res = blk_rq_map_user(q, rq, md, hp->dxferp, |