sg kill local jiffies problems
Subsystems (2)
It has been reported that the change to sg.c in lk 2.6.9-rc1-bk5 to use library jiffy functions breaks sg (albeit under vmware). Evidentally sg devices are no longer recognised after that change.
Reverting that changeset removes the problem. Strange, it is not obvious why.
At some stage I must have detected negative time spans (yeh yeh it never happens) and my versions returned 0 in this case; otherwise the implementations look very similar.
Doug Gilbert
PATCH 1/1 sg jiffy library calls [was: sg kill local jiffies problems]
Quoted 10 lines · Douglas Gilbert
It has been reported that the change to
sg.cin lk 2.6.9-rc1-bk5 to use library jiffy functions breaks sg (albeit under vmware). Evidentally sg devices are no longer recognised after that change.Reverting that changeset removes the problem. Strange, it is not obvious why.
At some stage I must have detected negative time spans (yeh yeh it never happens) and my versions returned 0 in this case; otherwise the implementations look very similar.
The following patch fixes the problem. It is
against lk 2.6.9-rc1-bk7 (i.e. after "standard"jiffy_to_millisecs macros replaced sg versions).
Change:
- make sure a (large) user supplied timeout value does not result in a negative timeout passed to the midlevel
Doug Gilbert
drivers/scsi/sg.c269rc1bk7jif renamed from drivers/scsi/sg.c +3 -1
@@ -576,6 +576,7 @@ sg_io_hdr_t *hp; unsigned char cmnd[sizeof (dummy_cmdp->sr_cmnd)]; int timeout; + unsigned long ul_timeout; if (count < SZ_SG_IO_HDR) return -EINVAL;
@@ -610,7 +611,8 @@ return -EBUSY; /* reserve buffer already being used */ } } - timeout = msecs_to_jiffies(srp->header.timeout); + ul_timeout = msecs_to_jiffies(srp->header.timeout); + timeout = (ul_timeout < INT_MAX) ? ul_timeout : INT_MAX; if ((!hp->cmdp) || (hp->cmd_len < 6) || (hp->cmd_len > sizeof (cmnd))) { sg_remove_request(sfp, srp); return -EMSGSIZE;