diff options
| author | Alexander Viro <viro@math.psu.edu> | 2002-10-31 19:25:47 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-10-31 19:25:47 -0800 |
| commit | e09824be64cb5d651ddfca19fe9a9c002eb82ab0 (patch) | |
| tree | 08fcdbdaa961b93223065258ced509979012be48 | |
| parent | 1c48fba3a63d375f41d35f90e5e69cf75fc64674 (diff) | |
[PATCH] scsi_get_request_dev() cleanup
_Now_ we can clean the scsi_get_request_dev() up. Indeed, for
any SCSI request we either have ->rq_dev == NODEV and ->rq_disk == NULL
or ->rq_disk->private_data points to address of template in question.
IOW, scsi_get_request_dev() becomes simply
{
struct gendisk *p = req->rq_disk;
return p ? *(struct Scsi_Device_Template **)p->private_data : NULL;
}
and that allows to kill ->max_major, ->min_major and ->major in
Scsi_Device_Template, along with the last non-trivial use of ->rq_dev.
| -rw-r--r-- | drivers/scsi/hosts.h | 3 | ||||
| -rw-r--r-- | drivers/scsi/ide-scsi.c | 8 | ||||
| -rw-r--r-- | drivers/scsi/osst.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 34 | ||||
| -rw-r--r-- | drivers/scsi/sd.c | 3 | ||||
| -rw-r--r-- | drivers/scsi/sg.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/sr.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/st.c | 1 |
8 files changed, 9 insertions, 43 deletions
diff --git a/drivers/scsi/hosts.h b/drivers/scsi/hosts.h index 973a8261dcde..96a73d9c3f72 100644 --- a/drivers/scsi/hosts.h +++ b/drivers/scsi/hosts.h @@ -560,9 +560,6 @@ struct Scsi_Device_Template const char * tag; struct module * module; /* Used for loadable modules */ unsigned char scsi_type; - unsigned int major; - unsigned int min_major; /* Minimum major in range. */ - unsigned int max_major; /* Maximum major in range. */ unsigned int nr_dev; /* Number currently attached */ unsigned int dev_noticed; /* Number of devices detected. */ unsigned int dev_max; /* Current size of arrays */ diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c index ea42672cf04c..a5960cded0b0 100644 --- a/drivers/scsi/ide-scsi.c +++ b/drivers/scsi/ide-scsi.c @@ -760,9 +760,13 @@ static inline struct bio *idescsi_dma_bio(ide_drive_t *drive, idescsi_pc_t *pc) static inline int should_transform(ide_drive_t *drive, Scsi_Cmnd *cmd) { idescsi_scsi_t *scsi = drive->driver_data; + struct gendisk *disk = cmd->request->rq_disk; - if (major(cmd->request->rq_dev) == SCSI_GENERIC_MAJOR) - return test_bit(IDESCSI_SG_TRANSFORM, &scsi->transform); + if (disk) { + struct Scsi_Device_Template **p = disk->private_data; + if (strcmp((*p)->tag, "sg") == 0) + return test_bit(IDESCSI_SG_TRANSFORM, &scsi->transform); + } return test_bit(IDESCSI_TRANSFORM, &scsi->transform); } diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c index f67ed039cb1d..fc1836cd7a55 100644 --- a/drivers/scsi/osst.c +++ b/drivers/scsi/osst.c @@ -162,7 +162,6 @@ struct Scsi_Device_Template osst_template = name: "OnStream tape", tag: "osst", scsi_type: TYPE_TAPE, - major: OSST_MAJOR, detect: osst_detect, init: osst_init, attach: osst_attach, diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index a2e65e3f15c8..bab4b967f3ba 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -635,7 +635,7 @@ void scsi_io_completion(Scsi_Cmnd * SCpnt, int good_sectors, break; case NOT_READY: printk(KERN_INFO "Device %s not ready.\n", - kdevname(req->rq_dev)); + req->rq_disk ? req->rq_disk->disk_name : ""); SCpnt = scsi_end_request(SCpnt, 0, this_count); return; break; @@ -703,36 +703,8 @@ void scsi_io_completion(Scsi_Cmnd * SCpnt, int good_sectors, */ struct Scsi_Device_Template *scsi_get_request_dev(struct request *req) { - struct Scsi_Device_Template *spnt; - kdev_t dev = req->rq_dev; - int major = major(dev); - - for (spnt = scsi_devicelist; spnt; spnt = spnt->next) { - /* - * Search for a block device driver that supports this - * major. - */ - if (spnt->blk && spnt->major == major) { - return spnt; - } - /* - * I am still not entirely satisfied with this solution, - * but it is good enough for now. Disks have a number of - * major numbers associated with them, the primary - * 8, which we test above, and a secondary range of 7 - * different consecutive major numbers. If this ever - * becomes insufficient, then we could add another function - * to the structure, and generalize this completely. - */ - if( spnt->min_major != 0 - && spnt->max_major != 0 - && major >= spnt->min_major - && major <= spnt->max_major ) - { - return spnt; - } - } - return NULL; + struct gendisk *p = req->rq_disk; + return p ? *(struct Scsi_Device_Template **)p->private_data : NULL; } /* diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 011050ec82fe..10c72cd77c16 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -106,9 +106,6 @@ static struct Scsi_Device_Template sd_template = { .name = "disk", .tag = "sd", .scsi_type = TYPE_DISK, - .major = SCSI_DISK0_MAJOR, - .min_major = SCSI_DISK1_MAJOR, - .max_major = SCSI_DISK7_MAJOR, .blk = 1, .detect = sd_detect, .attach = sd_attach, diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index a63215467fee..dd393db6ef0c 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -125,7 +125,6 @@ static struct Scsi_Device_Template sg_template = { .name = "generic", .tag = "sg", .scsi_type = 0xff, - .major = SCSI_GENERIC_MAJOR, .detect = sg_detect, .init = sg_init, .attach = sg_attach, diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index 95000eec802d..8fd17171b54e 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -77,7 +77,6 @@ static struct Scsi_Device_Template sr_template = { .name = "cdrom", .tag = "sr", .scsi_type = TYPE_ROM, - .major = SCSI_CDROM_MAJOR, .blk = 1, .detect = sr_detect, .init = sr_init, diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index 1d531d3bc086..2537412f7734 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c @@ -175,7 +175,6 @@ static struct Scsi_Device_Template st_template = { .name = "tape", .tag = "st", .scsi_type = TYPE_TAPE, - .major = SCSI_TAPE_MAJOR, .detect = st_detect, .attach = st_attach, .detach = st_detach |
