History

Merge tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley: "This is a set of six patches consisting of: - two MAINTAINER updates - two scsi-mq fixs for the old parallel interface (not every request is tagged and we need to set the right flags to populate the SPI tag message) - a fix for a memory leak in scatterlist traversal caused by a preallocation update in 3.17 - an ipv6 fix for cxgbi" [ The scatterlist fix also came in separately through the block layer tree ] * tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: MAINTAINERS: ufs - remove self MAINTAINERS: change hpsa and cciss maintainer libcxgbi : support ipv6 address host_param scsi: set REQ_QUEUE for the blk-mq case Revert "block: all blk-mq requests are tagged" lib/scatterlist: fix memory leak with scsi-mq

Linus Torvalds committed 12 years ago

Commit ad2be372 parents 1226716 ff150a76 files · +53 −19Browse files

Unified · Split

6 files
  1. MAINTAINERS +6 −3
  2. drivers/scsi/cxgbi/libcxgbi.c +37 −5
  3. drivers/scsi/cxgbi/libcxgbi.h +0 −5
  4. drivers/scsi/scsi_lib.c +5 −0
  5. include/linux/blkdev.h +1 −2
  6. include/scsi/scsi_tcq.h +4 −4
MAINTAINERS+6−3
@@ -4312,8 +4312,10 @@ F: Documentation/blockdev/cpqarray.txt · 4311 unmodified lines
43124312 F: drivers/block/cpqarray.*
43134313
43144314 HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa)
4315−M: "Stephen M. Cameron" <scameron@beardog.cce.hp.com>
4315+M: Don Brace <don.brace@pmcs.com>
43164316 L: iss_storagedev@hp.com
4317+L: storagedev@pmcs.com
4318+L: linux-scsi@vger.kernel.org
43174319 S: Supported
43184320 F: Documentation/scsi/hpsa.txt
43194321 F: drivers/scsi/hpsa*.[ch]
@@ -4321,8 +4323,10 @@ F: include/linux/cciss*.h · 1 unmodified line
43214323 F: include/uapi/linux/cciss*.h
43224324
43234325 HEWLETT-PACKARD SMART CISS RAID DRIVER (cciss)
4324−M: Mike Miller <mike.miller@hp.com>
4326+M: Don Brace <don.brace@pmcs.com>
43254327 L: iss_storagedev@hp.com
4328+L: storagedev@pmcs.com
4329+L: linux-scsi@vger.kernel.org
43264330 S: Supported
43274331 F: Documentation/blockdev/cciss.txt
43284332 F: drivers/block/cciss*
@@ -9606,7 +9610,6 @@ F: drivers/staging/unisys/ · 5277 unmodified lines
96069610
96079611 UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER
96089612 M: Vinayak Holikatti <vinholikatti@gmail.com>
9609−M: Santosh Y <santoshsy@gmail.com>
96109613 L: linux-scsi@vger.kernel.org
96119614 S: Supported
96129615 F: Documentation/scsi/ufs.txt
drivers/scsi/cxgbi/libcxgbi.c+37−5
@@ -399,6 +399,35 @@ EXPORT_SYMBOL_GPL(cxgbi_hbas_add); · 398 unmodified lines
399399 * If the source port is outside our allocation range, the caller is
400400 * responsible for keeping track of their port usage.
401401 */
402+
403+static struct cxgbi_sock *find_sock_on_port(struct cxgbi_device *cdev,
404+ unsigned char port_id)
405+{
406+ struct cxgbi_ports_map *pmap = &cdev->pmap;
407+ unsigned int i;
408+ unsigned int used;
409+
410+ if (!pmap->max_connect || !pmap->used)
411+ return NULL;
412+
413+ spin_lock_bh(&pmap->lock);
414+ used = pmap->used;
415+ for (i = 0; used && i < pmap->max_connect; i++) {
416+ struct cxgbi_sock *csk = pmap->port_csk[i];
417+
418+ if (csk) {
419+ if (csk->port_id == port_id) {
420+ spin_unlock_bh(&pmap->lock);
421+ return csk;
422+ }
423+ used--;
424+ }
425+ }
426+ spin_unlock_bh(&pmap->lock);
427+
428+ return NULL;
429+}
430+
402431 static int sock_get_port(struct cxgbi_sock *csk)
403432 {
404433 struct cxgbi_device *cdev = csk->cdev;
@@ -749,6 +778,7 @@ static struct cxgbi_sock *cxgbi_check_route6(struct sockaddr *dst_addr) · 344 unmodified lines
749778 csk->daddr6.sin6_addr = daddr6->sin6_addr;
750779 csk->daddr6.sin6_port = daddr6->sin6_port;
751780 csk->daddr6.sin6_family = daddr6->sin6_family;
781+ csk->saddr6.sin6_family = daddr6->sin6_family;
752782 csk->saddr6.sin6_addr = pref_saddr;
753783
754784 neigh_release(n);
@@ -2647,12 +2677,14 @@ int cxgbi_get_host_param(struct Scsi_Host *shost, enum iscsi_host_param param, · 1892 unmodified lines
26472677 break;
26482678 case ISCSI_HOST_PARAM_IPADDRESS:
26492679 {
2650− __be32 addr;
2651−
2652− addr = cxgbi_get_iscsi_ipv4(chba);
2653− len = sprintf(buf, "%pI4", &addr);
2680+ struct cxgbi_sock *csk = find_sock_on_port(chba->cdev,
2681+ chba->port_id);
2682+ if (csk) {
2683+ len = sprintf(buf, "%pIS",
2684+ (struct sockaddr *)&csk->saddr);
2685+ }
26542686 log_debug(1 << CXGBI_DBG_ISCSI,
2655− "hba %s, ipv4 %pI4.\n", chba->ndev->name, &addr);
2687+ "hba %s, addr %s.\n", chba->ndev->name, buf);
26562688 break;
26572689 }
26582690 default:
drivers/scsi/cxgbi/libcxgbi.h+0−5
@@ -700,11 +700,6 @@ static inline void cxgbi_set_iscsi_ipv4(struct cxgbi_hba *chba, __be32 ipaddr) · 699 unmodified lines
700700 chba->ndev->name);
701701 }
702702
703−static inline __be32 cxgbi_get_iscsi_ipv4(struct cxgbi_hba *chba)
704−{
705− return chba->ipv4addr;
706−}
707−
708703 struct cxgbi_device *cxgbi_device_register(unsigned int, unsigned int);
709704 void cxgbi_device_unregister(struct cxgbi_device *);
710705 void cxgbi_device_unregister_all(unsigned int flag);
drivers/scsi/scsi_lib.c+5−0
@@ -1893,6 +1893,11 @@ static int scsi_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req, · 1892 unmodified lines
18931893 blk_mq_start_request(req);
18941894 }
18951895
1896+ if (blk_queue_tagged(q))
1897+ req->cmd_flags |= REQ_QUEUED;
1898+ else
1899+ req->cmd_flags &= ~REQ_QUEUED;
1900+
18961901 scsi_init_cmd_errh(cmd);
18971902 cmd->scsi_done = scsi_mq_done;
18981903
include/linux/blkdev.h+1−2
@@ -1136,8 +1136,7 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk) · 1135 unmodified lines
11361136 /*
11371137 * tag stuff
11381138 */
1139−#define blk_rq_tagged(rq) \
1140− ((rq)->mq_ctx || ((rq)->cmd_flags & REQ_QUEUED))
1139+#define blk_rq_tagged(rq) ((rq)->cmd_flags & REQ_QUEUED)
11411140 extern int blk_queue_start_tag(struct request_queue *, struct request *);
11421141 extern struct request *blk_queue_find_tag(struct request_queue *, int);
11431142 extern void blk_queue_end_tag(struct request_queue *, struct request *);
include/scsi/scsi_tcq.h+4−4
@@ -67,8 +67,9 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth) · 66 unmodified lines
6767 if (!sdev->tagged_supported)
6868 return;
6969
70− if (!shost_use_blk_mq(sdev->host) &&
71− !blk_queue_tagged(sdev->request_queue))
70+ if (shost_use_blk_mq(sdev->host))
71+ queue_flag_set_unlocked(QUEUE_FLAG_QUEUED, sdev->request_queue);
72+ else if (!blk_queue_tagged(sdev->request_queue))
7273 blk_queue_init_tags(sdev->request_queue, depth,
7374 sdev->host->bqt);
7475
@@ -81,8 +82,7 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth) · 6 unmodified lines
8182 **/
8283 static inline void scsi_deactivate_tcq(struct scsi_device *sdev, int depth)
8384 {
84− if (!shost_use_blk_mq(sdev->host) &&
85− blk_queue_tagged(sdev->request_queue))
85+ if (blk_queue_tagged(sdev->request_queue))
8686 blk_queue_free_tags(sdev->request_queue);
8787 scsi_adjust_queue_depth(sdev, 0, depth);
8888 }