diff options
author | Hannes Reinecke <hare@suse.de> | 2017-09-15 08:05:15 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2017-09-15 15:15:24 -0400 |
commit | 4759df905a474d245752c9dc94288e779b8734dd (patch) | |
tree | f45cbc99ec94f5ef40ae213a4fb8f9ba4b33ef69 | |
parent | 9c95be0163a0a699ed7eda4727f485f8453580ef (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.c | 61 |
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 | ||
831 | static void | ||
832 | sg_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 | |||
831 | static long | 865 | static long |
832 | sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) | 866 | sg_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); |