mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-04 04:04:19 +00:00
scsi: core: Fail host creation if creating the proc directory fails
Users expect that the contents of /proc/scsi is in sync with the contents of /sys/class/scsi_host. Hence fail host creation if creating the proc directory fails. Suggested-by: John Garry <john.garry@huawei.com> Reviewed-by: John Garry <john.garry@huawei.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Ming Lei <ming.lei@redhat.com> Cc: Hannes Reinecke <hare@suse.de> Cc: Mike Christie <michael.christie@oracle.com> Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Signed-off-by: Bart Van Assche <bvanassche@acm.org> Link: https://lore.kernel.org/r/20221015002418.30955-4-bvanassche@acm.org Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
77916da7e4
commit
ecca3f9b16
@ -519,7 +519,8 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
|
||||
"failed to create tmf workq\n");
|
||||
goto fail;
|
||||
}
|
||||
scsi_proc_hostdir_add(shost->hostt);
|
||||
if (scsi_proc_hostdir_add(shost->hostt) < 0)
|
||||
goto fail;
|
||||
return shost;
|
||||
fail:
|
||||
/*
|
||||
|
@ -111,14 +111,14 @@ extern void scsi_evt_thread(struct work_struct *work);
|
||||
|
||||
/* scsi_proc.c */
|
||||
#ifdef CONFIG_SCSI_PROC_FS
|
||||
extern void scsi_proc_hostdir_add(struct scsi_host_template *);
|
||||
extern int scsi_proc_hostdir_add(struct scsi_host_template *);
|
||||
extern void scsi_proc_hostdir_rm(struct scsi_host_template *);
|
||||
extern void scsi_proc_host_add(struct Scsi_Host *);
|
||||
extern void scsi_proc_host_rm(struct Scsi_Host *);
|
||||
extern int scsi_init_procfs(void);
|
||||
extern void scsi_exit_procfs(void);
|
||||
#else
|
||||
# define scsi_proc_hostdir_add(sht) do { } while (0)
|
||||
# define scsi_proc_hostdir_add(sht) 0
|
||||
# define scsi_proc_hostdir_rm(sht) do { } while (0)
|
||||
# define scsi_proc_host_add(shost) do { } while (0)
|
||||
# define scsi_proc_host_rm(shost) do { } while (0)
|
||||
|
@ -108,20 +108,25 @@ static const struct proc_ops proc_scsi_ops = {
|
||||
*
|
||||
* Sets sht->proc_dir to the new directory.
|
||||
*/
|
||||
|
||||
void scsi_proc_hostdir_add(struct scsi_host_template *sht)
|
||||
int scsi_proc_hostdir_add(struct scsi_host_template *sht)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (!sht->show_info)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
mutex_lock(&global_host_template_mutex);
|
||||
if (!sht->present++) {
|
||||
sht->proc_dir = proc_mkdir(sht->proc_name, proc_scsi);
|
||||
if (!sht->proc_dir)
|
||||
if (!sht->proc_dir) {
|
||||
printk(KERN_ERR "%s: proc_mkdir failed for %s\n",
|
||||
__func__, sht->proc_name);
|
||||
ret = -ENOMEM;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&global_host_template_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user