UAS: Embed srcu structure in uas_dev_info.
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index 0db05be..94c6724 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -129,7 +129,7 @@
struct uas_dev_info {
struct usb_interface *intf;
struct usb_device *udev;
- struct srcu_struct *srcu;
+ struct srcu_struct srcu;
int qdepth;
unsigned cmd_pipe, status_pipe, data_in_pipe, data_out_pipe;
unsigned use_streams:1;
@@ -256,9 +256,9 @@
struct uas_cmd_info *cmdinfo = (void *)&cmnd->SCp;
int err, srcu_idx;
- srcu_idx = srcu_read_lock(devinfo->srcu);
+ srcu_idx = srcu_read_lock(&devinfo->srcu);
if (atomic_read(&devinfo->resetting)) {
- srcu_read_unlock(devinfo->srcu, srcu_idx);
+ srcu_read_unlock(&devinfo->srcu, srcu_idx);
return -ENODEV;
}
@@ -270,7 +270,7 @@
spin_unlock(&uas_work_lock);
schedule_work(&uas_work);
}
- srcu_read_unlock(devinfo->srcu, srcu_idx);
+ srcu_read_unlock(&devinfo->srcu, srcu_idx);
return 0;
}
@@ -544,10 +544,10 @@
BUILD_BUG_ON(sizeof(struct uas_cmd_info) > sizeof(struct scsi_pointer));
- srcu_idx = srcu_read_lock(devinfo->srcu);
+ srcu_idx = srcu_read_lock(&devinfo->srcu);
if ((!cmdinfo->status_urb && sdev->current_cmnd) ||
atomic_read(&devinfo->resetting)) {
- srcu_read_unlock(devinfo->srcu, srcu_idx);
+ srcu_read_unlock(&devinfo->srcu, srcu_idx);
return SCSI_MLQUEUE_DEVICE_BUSY;
}
@@ -586,7 +586,7 @@
/* If we did nothing, give up now */
if (cmdinfo->state & SUBMIT_STATUS_URB) {
usb_free_urb(cmdinfo->status_urb);
- srcu_read_unlock(devinfo->srcu, srcu_idx);
+ srcu_read_unlock(&devinfo->srcu, srcu_idx);
return SCSI_MLQUEUE_DEVICE_BUSY;
}
spin_lock(&uas_work_lock);
@@ -595,7 +595,7 @@
schedule_work(&uas_work);
}
- srcu_read_unlock(devinfo->srcu, srcu_idx);
+ srcu_read_unlock(&devinfo->srcu, srcu_idx);
return 0;
}
@@ -726,9 +726,9 @@
sdev_printk(KERN_INFO, sdev, "%s tag %d\n", __func__,
cmnd->request->tag);
- srcu_idx = srcu_read_lock(devinfo->srcu);
+ srcu_idx = srcu_read_lock(&devinfo->srcu);
if (atomic_read(&devinfo->resetting)) {
- srcu_read_unlock(devinfo->srcu, srcu_idx);
+ srcu_read_unlock(&devinfo->srcu, srcu_idx);
return FAILED;
}
@@ -744,7 +744,7 @@
*/
if (!(cmdinfo->state & SUBMIT_CMD_URB)) {
if (uas_issue_abort_task(cmnd, sdev, devinfo)) {
- srcu_read_unlock(devinfo->srcu, srcu_idx);
+ srcu_read_unlock(&devinfo->srcu, srcu_idx);
return FAILED;
}
}
@@ -754,7 +754,7 @@
else
uas_kill_tagged_urbs(&devinfo->anchors[0], cmdinfo);
- srcu_read_unlock(devinfo->srcu, srcu_idx);
+ srcu_read_unlock(&devinfo->srcu, srcu_idx);
return SUCCESS;
}
@@ -967,10 +967,7 @@
init_usb_anchor(&devinfo->anchors[i]);
printk(KERN_DEBUG "UAS: anchors allocated\n");
- devinfo->srcu = kmalloc(sizeof(*devinfo->srcu), GFP_KERNEL);
- if (!devinfo->srcu)
- goto free_anchors;
- init_srcu_struct(devinfo->srcu);
+ init_srcu_struct(&devinfo->srcu);
result = scsi_add_host(shost, &intf->dev);
if (result)
@@ -982,9 +979,7 @@
return result;
free_srcu:
- cleanup_srcu_struct(devinfo->srcu);
- kfree(devinfo->srcu);
-free_anchors:
+ cleanup_srcu_struct(&devinfo->srcu);
kfree(devinfo->anchors);
free:
kfree(devinfo);
@@ -1022,7 +1017,7 @@
* the same volatile trick as ACCESS_ONCE()).
*/
atomic_set(&devinfo->resetting, 1);
- synchronize_srcu(devinfo->srcu);
+ synchronize_srcu(&devinfo->srcu);
/* Stop the workqueue, and stop it from rescheduling itself. */
cancel_work_sync(&uas_work);
@@ -1084,7 +1079,7 @@
* returning from post-reset. Otherwise the SCSI core could schedule a
* command queue on a separate CPU where the flag might be stale.
*/
- synchronize_srcu(devinfo->srcu);
+ synchronize_srcu(&devinfo->srcu);
return 0;
}
@@ -1097,8 +1092,7 @@
/* Clean up any pending commands and free streams */
uas_pre_reset(intf);
- cleanup_srcu_struct(devinfo->srcu);
- kfree(devinfo->srcu);
+ cleanup_srcu_struct(&devinfo->srcu);
kfree(devinfo->anchors);
kfree(devinfo);
scsi_host_put(shost);