From: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> The SCSI core calls scsi_proc_hostdir_add() from within scsi_host_alloc(), but the corresponding scsi_proc_hostdir_rm() routine is called from within scsi_remove_host(). As a result, if a host is allocated and then deallocated without ever being registered, the host's directory in /proc is leaked. This patch (as1181) fixes this bug in the SCSI core by moving scsi_proc_hostdir_add() into scsi_host_add(). Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> Cc: James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- drivers/scsi/hosts.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff -puN drivers/scsi/hosts.c~scsi-fix-proc-memory-leak-in-the-scsi-core drivers/scsi/hosts.c --- a/drivers/scsi/hosts.c~scsi-fix-proc-memory-leak-in-the-scsi-core +++ a/drivers/scsi/hosts.c @@ -206,9 +206,10 @@ int scsi_add_host(struct Scsi_Host *shos if (error) goto fail; + scsi_proc_hostdir_add(shost->hostt); + if (!shost->shost_gendev.parent) shost->shost_gendev.parent = dev ? dev : &platform_bus; - error = device_add(&shost->shost_gendev); if (error) goto out; @@ -259,6 +260,7 @@ int scsi_add_host(struct Scsi_Host *shos out_del_gendev: device_del(&shost->shost_gendev); out: + scsi_proc_hostdir_rm(shost->hostt); scsi_destroy_command_freelist(shost); fail: return error; @@ -407,7 +409,6 @@ struct Scsi_Host *scsi_host_alloc(struct goto fail_kfree; } - scsi_proc_hostdir_add(shost->hostt); return shost; fail_kfree: _ -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html