Re: [PATCH] Avoid that toggling use_blk_mq triggers a memory leak

2016-09-26 Thread Martin K. Petersen
> "Bart" == Bart Van Assche  writes:

Bart> This patch avoids that the following memory leak is triggered if
Bart> use_blk_mq is disabled after a SCSI host has been allocated by the
Bart> ib_srp driver and before the same SCSI host is freed:

Applied to 4.8/scsi-fixes.

-- 
Martin K. Petersen  Oracle Linux Engineering
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Avoid that toggling use_blk_mq triggers a memory leak

2016-09-22 Thread Christoph Hellwig
Yes, that's indeed an issue that popped up when removing the per-host
flag.

Reviewed-by: Christoph Hellwig 
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] Avoid that toggling use_blk_mq triggers a memory leak

2016-09-22 Thread Bart Van Assche
This patch avoids that the following memory leak is triggered if
use_blk_mq is disabled after a SCSI host has been allocated by
the ib_srp driver and before the same SCSI host is freed:

unreferenced object 0x8803a168c568 (size 256):
  backtrace:
[] kmemleak_alloc+0x45/0xa0
[] __kmalloc_node+0x1e4/0x400
[] blk_mq_alloc_tag_set+0xb4/0x230
[] scsi_mq_setup_tags+0xc7/0xd0
[] scsi_add_host_with_dma+0x216/0x2d0
[] srp_create_target+0xe55/0x13d0 [ib_srp]
[] dev_attr_store+0x13/0x20
[] sysfs_kf_write+0x40/0x50
[] kernfs_fop_write+0x137/0x1c0
[] __vfs_write+0x23/0x140
[] vfs_write+0xb0/0x190
[] SyS_write+0x44/0xa0
[] entry_SYSCALL_64_fastpath+0x18/0xa8

Fixes: 9aa9cc4221f5 ("scsi: remove the disable_blk_mq host flag")
Signed-off-by: Bart Van Assche 
Cc: Christoph Hellwig 
Cc: Martin K. Petersen 
Cc: 
---
 drivers/scsi/hosts.c | 2 ++
 drivers/scsi/scsi.c  | 1 -
 drivers/scsi/scsi_priv.h | 1 +
 include/scsi/scsi_host.h | 5 +
 4 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
index ba9af4a..ec6381e 100644
--- a/drivers/scsi/hosts.c
+++ b/drivers/scsi/hosts.c
@@ -486,6 +486,8 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template 
*sht, int privsize)
else
shost->dma_boundary = 0x;
 
+   shost->use_blk_mq = scsi_use_blk_mq;
+
device_initialize(>shost_gendev);
dev_set_name(>shost_gendev, "host%d", shost->host_no);
shost->shost_gendev.bus = _bus_type;
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 1f36aca..1deb6ad 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -1160,7 +1160,6 @@ bool scsi_use_blk_mq = true;
 bool scsi_use_blk_mq = false;
 #endif
 module_param_named(use_blk_mq, scsi_use_blk_mq, bool, S_IWUSR | S_IRUGO);
-EXPORT_SYMBOL_GPL(scsi_use_blk_mq);
 
 static int __init init_scsi(void)
 {
diff --git a/drivers/scsi/scsi_priv.h b/drivers/scsi/scsi_priv.h
index 25e4643..c76e87d 100644
--- a/drivers/scsi/scsi_priv.h
+++ b/drivers/scsi/scsi_priv.h
@@ -29,6 +29,7 @@ extern int scsi_init_hosts(void);
 extern void scsi_exit_hosts(void);
 
 /* scsi.c */
+extern bool scsi_use_blk_mq;
 extern int scsi_setup_command_freelist(struct Scsi_Host *shost);
 extern void scsi_destroy_command_freelist(struct Scsi_Host *shost);
 #ifdef CONFIG_SCSI_LOGGING
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 0dee7af..7e4cd53 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -771,12 +771,9 @@ static inline int scsi_host_in_recovery(struct Scsi_Host 
*shost)
shost->tmf_in_progress;
 }
 
-extern bool scsi_use_blk_mq;
-
 static inline bool shost_use_blk_mq(struct Scsi_Host *shost)
 {
-   return scsi_use_blk_mq;
-
+   return shost->use_blk_mq;
 }
 
 extern int scsi_queue_work(struct Scsi_Host *, struct work_struct *);
-- 
2.10.0

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html