@@ -828,6 +828,40 @@ static int max_sectors_bytes(struct request_queue *q)
828
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
865
static long
832
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
1046
return - EFAULT ;
1013
1047
else {
1014
1048
sg_req_info_t * rinfo ;
1015
- unsigned int ms ;
1016
1049
1017
1050
rinfo = kmalloc (SZ_SG_REQ_INFO * SG_MAX_QUEUE ,
1018
1051
GFP_KERNEL );
1019
1052
if (!rinfo )
1020
1053
return - ENOMEM ;
1021
1054
read_lock_irqsave (& sfp -> rq_list_lock , iflags );
1022
- val = 0 ;
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
- }
1055
+ sg_fill_request_table (sfp , rinfo );
1047
1056
read_unlock_irqrestore (& sfp -> rq_list_lock , iflags );
1048
1057
result = __copy_to_user (p , rinfo ,
1049
1058
SZ_SG_REQ_INFO * SG_MAX_QUEUE );
0 commit comments