aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2017-09-15 08:05:15 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2017-09-15 15:15:24 -0400
commit4759df905a474d245752c9dc94288e779b8734dd (patch)
treef45cbc99ec94f5ef40ae213a4fb8f9ba4b33ef69
parent9c95be0163a0a699ed7eda4727f485f8453580ef (diff)
scsi: sg: factor out sg_fill_request_table()
Factor out sg_fill_request_table() for better readability. [mkp: typos, applied by hand] Signed-off-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Bart Van Assche <bart.vanassche@wdc.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/sg.c61
1 files changed, 35 insertions, 26 deletions
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index cf0e71db9e51..1acdb6e03999 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -828,6 +828,40 @@ static int max_sectors_bytes(struct request_queue *q)
828 return max_sectors << 9; 828 return max_sectors << 9;
829} 829}
830 830
831static void
832sg_fill_request_table(Sg_fd *sfp, sg_req_info_t *rinfo)
833{
834 Sg_request *srp;
835 int val;
836 unsigned int ms;
837
838 val = 0;
839 list_for_each_entry(srp, &sfp->rq_list, entry) {
840 if (val > SG_MAX_QUEUE)
841 break;
842 memset(&rinfo[val], 0, SZ_SG_REQ_INFO);
843 rinfo[val].req_state = srp->done + 1;
844 rinfo[val].problem =
845 srp->header.masked_status &
846 srp->header.host_status &
847 srp->header.driver_status;
848 if (srp->done)
849 rinfo[val].duration =
850 srp->header.duration;
851 else {
852 ms = jiffies_to_msecs(jiffies);
853 rinfo[val].duration =
854 (ms > srp->header.duration) ?
855 (ms - srp->header.duration) : 0;
856 }
857 rinfo[val].orphan = srp->orphan;
858 rinfo[val].sg_io_owned = srp->sg_io_owned;
859 rinfo[val].pack_id = srp->header.pack_id;
860 rinfo[val].usr_ptr = srp->header.usr_ptr;
861 val++;
862 }
863}
864
831static long 865static long
832sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) 866sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
833{ 867{
@@ -1012,38 +1046,13 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
1012 return -EFAULT; 1046 return -EFAULT;
1013 else { 1047 else {
1014 sg_req_info_t *rinfo; 1048 sg_req_info_t *rinfo;
1015 unsigned int ms;
1016 1049
1017 rinfo = kmalloc(SZ_SG_REQ_INFO * SG_MAX_QUEUE, 1050 rinfo = kmalloc(SZ_SG_REQ_INFO * SG_MAX_QUEUE,
1018 GFP_KERNEL); 1051 GFP_KERNEL);
1019 if (!rinfo) 1052 if (!rinfo)
1020 return -ENOMEM; 1053 return -ENOMEM;
1021 read_lock_irqsave(&sfp->rq_list_lock, iflags); 1054 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1022 val = 0; 1055 sg_fill_request_table(sfp, rinfo);
1023 list_for_each_entry(srp, &sfp->rq_list, entry) {
1024 if (val >= SG_MAX_QUEUE)
1025 break;
1026 memset(&rinfo[val], 0, SZ_SG_REQ_INFO);
1027 rinfo[val].req_state = srp->done + 1;
1028 rinfo[val].problem =
1029 srp->header.masked_status &
1030 srp->header.host_status &
1031 srp->header.driver_status;
1032 if (srp->done)
1033 rinfo[val].duration =
1034 srp->header.duration;
1035 else {
1036 ms = jiffies_to_msecs(jiffies);
1037 rinfo[val].duration =
1038 (ms > srp->header.duration) ?
1039 (ms - srp->header.duration) : 0;
1040 }
1041 rinfo[val].orphan = srp->orphan;
1042 rinfo[val].sg_io_owned = srp->sg_io_owned;
1043 rinfo[val].pack_id = srp->header.pack_id;
1044 rinfo[val].usr_ptr = srp->header.usr_ptr;
1045 val++;
1046 }
1047 read_unlock_irqrestore(&sfp->rq_list_lock, iflags); 1056 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1048 result = __copy_to_user(p, rinfo, 1057 result = __copy_to_user(p, rinfo,
1049 SZ_SG_REQ_INFO * SG_MAX_QUEUE); 1058 SZ_SG_REQ_INFO * SG_MAX_QUEUE);