diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/blkdev.h | 5 | ||||
-rw-r--r-- | include/scsi/scsi_device.h | 5 | ||||
-rw-r--r-- | include/scsi/scsi_host.h | 10 |
3 files changed, 15 insertions, 5 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 70ac2860a60..ef1afc178c0 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -355,8 +355,11 @@ struct request_queue unsigned long queue_flags; /* - * protects queue structures from reentrancy + * protects queue structures from reentrancy. ->__queue_lock should + * _never_ be used directly, it is queue private. always use + * ->queue_lock. */ + spinlock_t __queue_lock; spinlock_t *queue_lock; /* diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 07d974051b0..c018020d916 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h @@ -43,8 +43,9 @@ struct scsi_device { struct list_head siblings; /* list of all devices on this host */ struct list_head same_target_siblings; /* just the devices sharing same target id */ - volatile unsigned short device_busy; /* commands actually active on low-level */ - spinlock_t sdev_lock; /* also the request queue_lock */ + /* this is now protected by the request_queue->queue_lock */ + unsigned int device_busy; /* commands actually active on + * low-level. protected by queue_lock. */ spinlock_t list_lock; struct list_head cmd_list; /* queue of in use SCSI Command structures */ struct list_head starved_entry; diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 27f2c4e8943..1cee1e10094 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -448,8 +448,14 @@ struct Scsi_Host { wait_queue_head_t host_wait; struct scsi_host_template *hostt; struct scsi_transport_template *transportt; - volatile unsigned short host_busy; /* commands actually active on low-level */ - volatile unsigned short host_failed; /* commands that failed. */ + + /* + * The following two fields are protected with host_lock; + * however, eh routines can safely access during eh processing + * without acquiring the lock. + */ + unsigned int host_busy; /* commands actually active on low-level */ + unsigned int host_failed; /* commands that failed. */ unsigned short host_no; /* Used for IOCTL_GET_IDLUN, /proc/scsi et al. */ int resetting; /* if set, it means that last_reset is a valid value */ |