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);