Skip to content

Commit ad2be37

Browse files
committed
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
2 parents 1226716 + ff150a7 commit ad2be37

File tree

6 files changed

+53
-19
lines changed

6 files changed

+53
-19
lines changed

MAINTAINERS

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4312,17 +4312,21 @@ F: Documentation/blockdev/cpqarray.txt
43124312
F: drivers/block/cpqarray.*
43134313

43144314
HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa)
4315-
M: "Stephen M. Cameron" <[email protected].com>
4315+
M: Don Brace <don.brace@pmcs.com>
43164316
4317+
4318+
43174319
S: Supported
43184320
F: Documentation/scsi/hpsa.txt
43194321
F: drivers/scsi/hpsa*.[ch]
43204322
F: include/linux/cciss*.h
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
4328+
4329+
43264330
S: Supported
43274331
F: Documentation/blockdev/cciss.txt
43284332
F: drivers/block/cciss*
@@ -9606,7 +9610,6 @@ F: drivers/staging/unisys/
96069610

96079611
UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER
96089612
M: Vinayak Holikatti <[email protected]>
9609-
M: Santosh Y <[email protected]>
96109613
96119614
S: Supported
96129615
F: Documentation/scsi/ufs.txt

drivers/scsi/cxgbi/libcxgbi.c

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,35 @@ EXPORT_SYMBOL_GPL(cxgbi_hbas_add);
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)
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,
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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -700,11 +700,6 @@ static inline void cxgbi_set_iscsi_ipv4(struct cxgbi_hba *chba, __be32 ipaddr)
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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1893,6 +1893,11 @@ static int scsi_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req,
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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,8 +1136,7 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk)
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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth)
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)
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
}

0 commit comments

Comments
 (0)