]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] devfs: cleanup devfs use in scsi
authorChristoph Hellwig <hch@lst.de>
Fri, 18 Apr 2003 02:19:42 +0000 (19:19 -0700)
committerJeff Garzik <jgarzik@redhat.com>
Fri, 18 Apr 2003 02:19:42 +0000 (19:19 -0700)
Store the path of it's devfs directory in struct scsi_device.  Use
it in the devfs_register calls instead of the devfs_handle_t
which will go away soon.

drivers/scsi/osst.c
drivers/scsi/osst.h
drivers/scsi/scsi.h
drivers/scsi/scsi_scan.c
drivers/scsi/sg.c
drivers/scsi/st.c
drivers/scsi/st.h

index 8ccfb9e3642ba9eeb710b52d7c068b052bd98bbc..56a707368d72cfa76249893f8a42f9b04c0d456d 100644 (file)
@@ -47,6 +47,7 @@ const char * osst_version = "0.99.0";
 #include <linux/vmalloc.h>
 #include <linux/version.h>
 #include <linux/blk.h>
+#include <linux/devfs_fs_kernel.h>
 #include <asm/uaccess.h>
 #include <asm/dma.h>
 #include <asm/system.h>
@@ -99,6 +100,8 @@ static struct osst_dev_parm {
 };
 #endif
 
+static char *osst_formats[ST_NBR_MODES] ={"", "l", "m", "a"};
+
 /* Some default definitions have been moved to osst_options.h */
 #define OSST_BUFFER_SIZE (OSST_BUFFER_BLOCKS * ST_KILOBYTE)
 #define OSST_WRITE_THRESHOLD (OSST_WRITE_THRESHOLD_BLOCKS * ST_KILOBYTE)
@@ -5524,11 +5527,12 @@ static int osst_attach(Scsi_Device * SDp)
        write_unlock(&os_scsi_tapes_lock);
 
        for (mode = 0; mode < ST_NBR_MODES; ++mode) {
-               char name[8];
-               static char *formats[ST_NBR_MODES] ={"", "l", "m", "a"};
-               
+               char name[8], devfs_name[64];
+
                /*  Rewind entry  */
-               sprintf (name, "ot%s", formats[mode]);
+               sprintf(name, "ot%s", osst_formats[mode]);
+               sprintf(devfs_name, "%s/ot%s", SDp->devfs_name, osst_formats[mode]);
+
                sprintf(tpnt->driverfs_dev_r[mode].bus_id, "%s:%s", 
                                SDp->sdev_driverfs_dev.bus_id, name);
                sprintf(tpnt->driverfs_dev_r[mode].name, "%s%s", 
@@ -5541,13 +5545,14 @@ static int osst_attach(Scsi_Device * SDp)
                device_create_file(&tpnt->driverfs_dev_r[mode], 
                                &dev_attr_type);
                device_create_file(&tpnt->driverfs_dev_r[mode], &dev_attr_kdev);
-               tpnt->de_r[mode] =
-                       devfs_register (SDp->de, name, DEVFS_FL_DEFAULT,
+               devfs_register(NULL, devfs_name, 0,
                                        OSST_MAJOR, dev_num + (mode << 5),
                                        S_IFCHR | S_IRUGO | S_IWUGO,
                                        &osst_fops, NULL);
                /*  No-rewind entry  */
-               sprintf (name, "ot%sn", formats[mode]);
+               sprintf (name, "ot%sn", osst_formats[mode]);
+               sprintf(devfs_name, "%s/ot%sn", SDp->devfs_name, osst_formats[mode]);
+
                sprintf(tpnt->driverfs_dev_n[mode].bus_id, "%s:%s", 
                                SDp->sdev_driverfs_dev.bus_id, name);
                sprintf(tpnt->driverfs_dev_n[mode].name, "%s%s", 
@@ -5561,8 +5566,7 @@ static int osst_attach(Scsi_Device * SDp)
                                &dev_attr_type);
                device_create_file(&tpnt->driverfs_dev_n[mode], 
                                &dev_attr_kdev);
-               tpnt->de_n[mode] =
-                       devfs_register (SDp->de, name, DEVFS_FL_DEFAULT,
+               devfs_register(NULL, devfs_name, 0,
                                        OSST_MAJOR, dev_num + (mode << 5) + 128,
                                        S_IFCHR | S_IRUGO | S_IWUGO,
                                        &osst_fops, NULL);
@@ -5595,10 +5599,8 @@ static void osst_detach(Scsi_Device * SDp)
        if((tpnt = os_scsi_tapes[i]) && (tpnt->device == SDp)) {
                tpnt->device = NULL;
                for (mode = 0; mode < ST_NBR_MODES; ++mode) {
-                       devfs_unregister (tpnt->de_r[mode]);
-                       tpnt->de_r[mode] = NULL;
-                       devfs_unregister (tpnt->de_n[mode]);
-                       tpnt->de_n[mode] = NULL;
+                       devfs_remove("%s/ot%s", SDp->devfs_name, osst_formats[mode]);
+                       devfs_remove("%s/ot%sn", SDp->devfs_name, osst_formats[mode]);
                }
                devfs_unregister_tape(tpnt->drive->number);
                put_disk(tpnt->drive);
index d322df1fd38321963ee754788eac84930e9d0fb6..179c92eac5d5a4732c58c7c22a1457322fce70c8 100644 (file)
@@ -5,9 +5,7 @@
 #include <asm/byteorder.h>
 #include <linux/config.h>
 #include <linux/completion.h>
-#ifdef CONFIG_DEVFS_FS
-#include <linux/devfs_fs_kernel.h>
-#endif
+
 
 /*     FIXME - rename and use the following two types or delete them!
  *              and the types really should go to st.h anyway...
@@ -557,8 +555,6 @@ typedef struct {
   /* Mode characteristics */
   ST_mode modes[ST_NBR_MODES];
   int current_mode;
-  devfs_handle_t de_r[ST_NBR_MODES];  /*  Rewind entries     */
-  devfs_handle_t de_n[ST_NBR_MODES];  /*  No-rewind entries  */
   struct device driverfs_dev_r[ST_NBR_MODES];
   struct device driverfs_dev_n[ST_NBR_MODES];
 
index 08d94fa10fbaaff9c39a19af59747969e65bbb64..fa51ac63376398ce3d7cca2868de6822fe449c9b 100644 (file)
@@ -588,7 +588,8 @@ struct scsi_device {
        int access_count;       /* Count of open channels/mounts */
 
        void *hostdata;         /* available to low-level driver */
-       devfs_handle_t de;      /* directory for the device      */
+       char devfs_name[256];   /* devfs junk */
+       devfs_handle_t de;      /* will go away soon */
        char type;
        char scsi_level;
        unsigned char inquiry_len;      /* valid bytes in 'inquiry' */
index d794ade20c766d305bfd0eabc48f13a9bc4349a9..7a71c1c0260c8a7bdaab4da9ecd18d1f99aba9f2 100644 (file)
@@ -1244,9 +1244,10 @@ static int scsi_add_lun(Scsi_Device *sdev, Scsi_Request *sreq,
        
        scsi_device_register(sdev);
 
-       sdev->de = devfs_mk_dir("scsi/host%d/bus%d/target%d/lun%d",
+       sprintf(sdev->devfs_name, "scsi/host%d/bus%d/target%d/lun%d",
                                sdev->host->host_no, sdev->channel,
                                sdev->id, sdev->lun);
+       sdev->de = devfs_mk_dir(sdev->devfs_name);
 
        /*
         * End driverfs/devfs code.
@@ -1733,7 +1734,7 @@ int scsi_remove_device(struct scsi_device *sdev)
        if (sdev->attached)
                return -EINVAL;
 
-       devfs_unregister(sdev->de);
+       devfs_remove(sdev->devfs_name);
        scsi_device_unregister(sdev);
 
        scsi_free_sdev(sdev);
index bd6d50025126184589813063f3e7190f7f700ee6..4042fed385270bd7d494394c41a1b2de04ae1602 100644 (file)
@@ -182,7 +182,6 @@ typedef struct sg_device { /* holds the state of each scsi generic device */
        wait_queue_head_t o_excl_wait;  /* queue open() when O_EXCL in use */
        int sg_tablesize;       /* adapter's max scatter-gather table size */
        Sg_fd *headfp;          /* first open fd belonging to this device */
-       devfs_handle_t de;
        volatile char detached; /* 0->attached, 1->detached pending removal */
        volatile char exclude;  /* opened for exclusive access */
        char sgdebug;           /* 0->off, 1->sense, 9->dump dev, 10-> all devs */
@@ -1350,6 +1349,7 @@ sg_attach(Scsi_Device * scsidp)
        struct gendisk *disk;
        Sg_device *sdp = NULL;
        unsigned long iflags;
+       char devfs_name[64];
        int k, error;
 
        disk = alloc_disk(1);
@@ -1447,10 +1447,13 @@ find_empty_slot:
        device_register(&sdp->sg_driverfs_dev);
        device_create_file(&sdp->sg_driverfs_dev, &dev_attr_type);
        device_create_file(&sdp->sg_driverfs_dev, &dev_attr_kdev);
-       sdp->de = devfs_register(scsidp->de, "generic", DEVFS_FL_DEFAULT,
-                                SCSI_GENERIC_MAJOR, k,
-                                S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,
-                                &sg_fops, sdp);
+
+       sprintf(devfs_name, "%s/generic", scsidp->devfs_name);
+       devfs_register(NULL, devfs_name, 0,
+                       SCSI_GENERIC_MAJOR, k,
+                       S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,
+                       &sg_fops, sdp);
+
        switch (scsidp->type) {
        case TYPE_DISK:
        case TYPE_MOD:
@@ -1527,8 +1530,7 @@ sg_detach(Scsi_Device * scsidp)
        write_unlock_irqrestore(&sg_dev_arr_lock, iflags);
 
        if (sdp) {
-               devfs_unregister(sdp->de);
-               sdp->de = NULL;
+               devfs_remove("%s/generic", scsidp->devfs_name);
                device_remove_file(&sdp->sg_driverfs_dev, &dev_attr_type);
                device_remove_file(&sdp->sg_driverfs_dev, &dev_attr_kdev);
                device_unregister(&sdp->sg_driverfs_dev);
index 3977535e7ce29f02bf02ece001a2919993e07649..e11a76efd5f17e46767b80379138b1b661d809b7 100644 (file)
@@ -35,6 +35,7 @@ static char *verstr = "20030413";
 #include <linux/spinlock.h>
 #include <linux/blk.h>
 #include <linux/moduleparam.h>
+#include <linux/devfs_fs_kernel.h>
 #include <asm/uaccess.h>
 #include <asm/dma.h>
 #include <asm/system.h>
@@ -116,6 +117,7 @@ static struct st_dev_parm {
 };
 #endif
 
+static char *st_formats[ST_NBR_MODES] ={"", "l", "m", "a"};
 
 /* The default definitions have been moved to st_options.h */
 
@@ -3863,11 +3865,12 @@ static int st_attach(Scsi_Device * SDp)
        write_unlock(&st_dev_arr_lock);
 
        for (mode = 0; mode < ST_NBR_MODES; ++mode) {
-           char name[8];
-           static char *formats[ST_NBR_MODES] ={"", "l", "m", "a"};
+           char name[8], devfs_name[64];
 
            /*  Rewind entry  */
-           sprintf (name, "mt%s", formats[mode]);
+           sprintf(name, "mt%s", st_formats[mode]);
+           sprintf(devfs_name, "%s/mt%s", SDp->devfs_name, st_formats[mode]);
+           
            sprintf(tpnt->driverfs_dev_r[mode].bus_id, "%s:%s", 
                    SDp->sdev_driverfs_dev.bus_id, name);
            sprintf(tpnt->driverfs_dev_r[mode].name, "%s%s", 
@@ -3880,13 +3883,14 @@ static int st_attach(Scsi_Device * SDp)
            device_create_file(&tpnt->driverfs_dev_r[mode], 
                               &dev_attr_type);
            device_create_file(&tpnt->driverfs_dev_r[mode], &dev_attr_kdev);
-           tpnt->de_r[mode] =
-               devfs_register (SDp->de, name, DEVFS_FL_DEFAULT,
+           devfs_register(NULL, devfs_name, 0,
                                SCSI_TAPE_MAJOR, dev_num + (mode << 5),
                                S_IFCHR | S_IRUGO | S_IWUGO,
                                &st_fops, NULL);
            /*  No-rewind entry  */
-           sprintf (name, "mt%sn", formats[mode]);
+           sprintf (name, "mt%sn", st_formats[mode]);
+           sprintf(devfs_name, "%s/mt%sn", SDp->devfs_name, st_formats[mode]);
+
            sprintf(tpnt->driverfs_dev_n[mode].bus_id, "%s:%s", 
                    SDp->sdev_driverfs_dev.bus_id, name);
            sprintf(tpnt->driverfs_dev_n[mode].name, "%s%s", 
@@ -3900,8 +3904,7 @@ static int st_attach(Scsi_Device * SDp)
                               &dev_attr_type);
            device_create_file(&tpnt->driverfs_dev_n[mode], 
                               &dev_attr_kdev);
-           tpnt->de_n[mode] =
-               devfs_register (SDp->de, name, DEVFS_FL_DEFAULT,
+           devfs_register(NULL, devfs_name, 0,
                                SCSI_TAPE_MAJOR, dev_num + (mode << 5) + 128,
                                S_IFCHR | S_IRUGO | S_IWUGO,
                                &st_fops, NULL);
@@ -3939,10 +3942,8 @@ static void st_detach(Scsi_Device * SDp)
                        write_unlock(&st_dev_arr_lock);
                        devfs_unregister_tape(tpnt->disk->number);
                        for (mode = 0; mode < ST_NBR_MODES; ++mode) {
-                               devfs_unregister (tpnt->de_r[mode]);
-                               tpnt->de_r[mode] = NULL;
-                               devfs_unregister (tpnt->de_n[mode]);
-                               tpnt->de_n[mode] = NULL;
+                               devfs_remove("%s/mt%s", SDp->devfs_name, st_formats[mode]);
+                               devfs_remove("%s/mt%sn", SDp->devfs_name, st_formats[mode]);
                                device_remove_file(&tpnt->driverfs_dev_r[mode],
                                                   &dev_attr_type);
                                device_remove_file(&tpnt->driverfs_dev_r[mode],
index 5540a2f10d970a4910e431bab57f69c7f56e45a8..9ae9b1cf51524d5dba505a3586450abc43874b39 100644 (file)
@@ -5,7 +5,6 @@
 #ifndef _SCSI_H
 #include "scsi.h"
 #endif
-#include <linux/devfs_fs_kernel.h>
 #include <linux/completion.h>
 
 /* The tape buffer descriptor. */
@@ -104,8 +103,6 @@ typedef struct {
        /* Mode characteristics */
        ST_mode modes[ST_NBR_MODES];
        int current_mode;
-       devfs_handle_t de_r[ST_NBR_MODES];  /*  Rewind entries     */
-       devfs_handle_t de_n[ST_NBR_MODES];  /*  No-rewind entries  */
        struct device driverfs_dev_r[ST_NBR_MODES];
        struct device driverfs_dev_n[ST_NBR_MODES];