struct {
struct gendisk disk;
devfs_handle_t de;
- struct device *dev;
char name[5];
} *p;
struct gendisk *gd;
return 1;
gd = &p->disk;
gd->de_arr = &p->de;
- gd->driverfs_dev_arr = &p->dev;
SCSI_LOG_HLQUEUE(3, printk("sd_attach: scsi device: <%d,%d,%d,%d>\n",
sdp->host->host_no, sdp->channel, sdp->id, sdp->lun));
sd_template.nr_dev++;
gd->de_arr[0] = sdp->de;
- gd->driverfs_dev_arr[0] = &sdp->sdev_driverfs_dev;
gd->major = SD_MAJOR(dsk_nr>>4);
gd->first_minor = (dsk_nr & 15)<<4;
gd->minor_shift = 4;
sprintf(p->name, "sd%c", 'a'+dsk_nr%26);
gd->major_name = p->name;
gd->flags = sdp->removable ? GENHD_FL_REMOVABLE : 0;
+ gd->driverfs_dev = &sdp->sdev_driverfs_dev;
+ gd->flags |= GENHD_FL_DRIVERFS;
sd_disks[dsk_nr] = gd;
sd_dskname(dsk_nr, diskname);
printk(KERN_NOTICE "Attached scsi %sdisk %s at scsi%d, channel %d, "
struct device *dev, *parent;
int part;
- /* get parent driverfs device structure */
- if (hd->driverfs_dev_arr)
- parent = hd->driverfs_dev_arr[0];
- else /* if driverfs not supported by subsystem, skip partitions */
+ /* if driverfs not supported by subsystem, skip partitions */
+ if (!(hd->flags & GENHD_FL_DRIVERFS))
return;
+ parent = hd->driverfs_dev;
+
if (parent) {
sprintf(name, "%s", parent->name);
sprintf(bus_id, "%s:", parent->bus_id);
};
#define GENHD_FL_REMOVABLE 1
+#define GENHD_FL_DRIVERFS 2
struct gendisk {
int major; /* major number of driver */
struct block_device_operations *fops;
devfs_handle_t *de_arr; /* one per physical disc */
- struct device **driverfs_dev_arr;/* support driverfs hierarchy */
+ struct device *driverfs_dev;
int flags;
};