summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Viro <viro@math.psu.edu>2002-10-31 19:25:47 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2002-10-31 19:25:47 -0800
commite09824be64cb5d651ddfca19fe9a9c002eb82ab0 (patch)
tree08fcdbdaa961b93223065258ced509979012be48
parent1c48fba3a63d375f41d35f90e5e69cf75fc64674 (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.h3
-rw-r--r--drivers/scsi/ide-scsi.c8
-rw-r--r--drivers/scsi/osst.c1
-rw-r--r--drivers/scsi/scsi_lib.c34
-rw-r--r--drivers/scsi/sd.c3
-rw-r--r--drivers/scsi/sg.c1
-rw-r--r--drivers/scsi/sr.c1
-rw-r--r--drivers/scsi/st.c1
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