exposing sdev_target in sysfs
PATCH 1/1 exposing sdev_target in sysfs
OK, following the feedback this is the latest incarnation of the patch (I fixed a few other sleeping in irq context problems as well).
I've tested this adding and removing luns from a 16 lun array; it seems to be robust.
James
drivers/scsi/scsi_lib.c +5 -5
@@ -365,7 +365,7 @@unsigned long flags;spin_lock_irqsave (shost->host_lock, flags); - current_sdev->sdev_target->starget_sdev_user =NULL ; +scsi_target (current_sdev)->starget_sdev_user =NULL ;spin_unlock_irqrestore (shost->host_lock, flags);/*
@@ -377,7 +377,7 @@blk_run_queue (current_sdev->request_queue);spin_lock_irqsave (shost->host_lock, flags); -if (current_sdev->sdev_target->starget_sdev_user) +if (scsi_target (current_sdev)->starget_sdev_user) goto out;list_for_each_entry_safe (sdev, tmp, ¤t_sdev->same_target_siblings, same_target_siblings) {
@@ -1247,10 +1247,10 @@if (!scsi_host_queue_ready (q, shost, sdev)) goto not_ready;if (sdev->single_lun) { -if (sdev->sdev_target->starget_sdev_user && - sdev->sdev_target->starget_sdev_user != sdev) +if (scsi_target (sdev)->starget_sdev_user && +scsi_target (sdev)->starget_sdev_user != sdev) goto not_ready; - sdev->sdev_target->starget_sdev_user = sdev; +scsi_target (sdev)->starget_sdev_user = sdev; } shost->host_busy++;
drivers/scsi/scsi_priv.h +9 -1
@@ -65,9 +65,15 @@*/ struct scsi_target {struct scsi_device *starget_sdev_user; -unsigned int starget_refcnt; +struct device dev; }; +#define to_scsi_target (d) container_of(d, struct scsi_target, dev) +static inline struct scsi_target *scsi_target (struct scsi_device *sdev) +{ +return to_scsi_target (sdev->sdev_gendev.parent); +} +/* hosts.c */ extern int scsi_init_hosts (void );extern void scsi_exit_hosts (void );
@@ -156,6 +162,8 @@extern int scsi_sysfs_add_host (struct Scsi_Host *);extern int scsi_sysfs_register (void );extern void scsi_sysfs_unregister (void ); +extern int scsi_sysfs_device_initialize (struct scsi_device *); +extern int scsi_sysfs_target_initialize (struct scsi_device *);extern struct scsi_transport_template blank_transport_template;extern struct class sdev_class;
drivers/scsi/scsi_scan.c +9 -61
89 lines not on this page · raw message
drivers/scsi/scsi_sysfs.c +88 -3
131 lines not on this page · raw message