OSDN Git Service

scsi: esas2r: Introduce scsi_template_proc_dir()
authorBart Van Assche <bvanassche@acm.org>
Sat, 15 Oct 2022 00:24:12 +0000 (17:24 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 18 Oct 2022 03:17:09 +0000 (03:17 +0000)
Prepare for removing the 'proc_dir' and 'present' members from the SCSI
host template. This commit does not change any functionality.

Reviewed-by: John Garry <john.garry@huawei.com>
Cc: Bradley Grove <linuxdrivers@attotech.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-3-bvanassche@acm.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/esas2r/esas2r_main.c
drivers/scsi/scsi_proc.c
include/scsi/scsi_host.h

index 27f6e7c..d7a2c49 100644 (file)
@@ -635,10 +635,13 @@ static void __exit esas2r_exit(void)
        esas2r_log(ESAS2R_LOG_INFO, "%s called", __func__);
 
        if (esas2r_proc_major > 0) {
+               struct proc_dir_entry *proc_dir;
+
                esas2r_log(ESAS2R_LOG_INFO, "unregister proc");
 
-               remove_proc_entry(ATTONODE_NAME,
-                                 esas2r_proc_host->hostt->proc_dir);
+               proc_dir = scsi_template_proc_dir(esas2r_proc_host->hostt);
+               if (proc_dir)
+                       remove_proc_entry(ATTONODE_NAME, proc_dir);
                unregister_chrdev(esas2r_proc_major, ESAS2R_DRVR_NAME);
 
                esas2r_proc_major = 0;
@@ -728,11 +731,13 @@ const char *esas2r_info(struct Scsi_Host *sh)
                               esas2r_proc_major);
 
                if (esas2r_proc_major > 0) {
-                       struct proc_dir_entry *pde;
+                       struct proc_dir_entry *proc_dir;
+                       struct proc_dir_entry *pde = NULL;
 
-                       pde = proc_create(ATTONODE_NAME, 0,
-                                         sh->hostt->proc_dir,
-                                         &esas2r_proc_ops);
+                       proc_dir = scsi_template_proc_dir(sh->hostt);
+                       if (proc_dir)
+                               pde = proc_create(ATTONODE_NAME, 0, proc_dir,
+                                                 &esas2r_proc_ops);
 
                        if (!pde) {
                                esas2r_log_dev(ESAS2R_LOG_WARN,
index 95aee1a..456b430 100644 (file)
@@ -83,6 +83,17 @@ static int proc_scsi_host_open(struct inode *inode, struct file *file)
                                4 * PAGE_SIZE);
 }
 
+/**
+ * scsi_template_proc_dir() - returns the procfs dir for a SCSI host template
+ * @sht: SCSI host template pointer.
+ */
+struct proc_dir_entry *
+scsi_template_proc_dir(const struct scsi_host_template *sht)
+{
+       return sht->proc_dir;
+}
+EXPORT_SYMBOL_GPL(scsi_template_proc_dir);
+
 static const struct proc_ops proc_scsi_ops = {
        .proc_open      = proc_scsi_host_open,
        .proc_release   = single_release,
index fcf25f1..3854ffc 100644 (file)
@@ -751,6 +751,12 @@ extern struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *, int);
 extern int __must_check scsi_add_host_with_dma(struct Scsi_Host *,
                                               struct device *,
                                               struct device *);
+#if defined(CONFIG_SCSI_PROC_FS)
+struct proc_dir_entry *
+scsi_template_proc_dir(const struct scsi_host_template *sht);
+#else
+#define scsi_template_proc_dir(sht) NULL
+#endif
 extern void scsi_scan_host(struct Scsi_Host *);
 extern void scsi_rescan_device(struct device *);
 extern void scsi_remove_host(struct Scsi_Host *);