osst: wrong index used in inner loop
PATCH 1/1 osst: wrong index used in inner loop
Index i was already used in the outer loop.
--- drivers/scsi/osst.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
I'm not sure if this is the right fix, maybe a break or return is missing?
drivers/scsi/osst.c +3 -2
@@ -4702,8 +4702,9 @@ static int __os_scsi_tape_open(struct inode * inode, struct file * filp) STp->partition = STp->new_partition =0 ;if (STp->can_partitions) STp->nbr_partitions =1 ;/* This guess will be updated later if necessary */ -for (i=0 ; i <ST_NBR_PARTITIONS ; i++) { - STps = &(STp->ps[i]); +int j; +for (j=0 ; j <ST_NBR_PARTITIONS ; j++) { + STps = &(STp->ps[j]); STps->rw =ST_IDLE ; STps->eof =ST_NOEOF ; STps->at_sm =0 ;
Quoted 9 lines · On Sat, 19 Mar 2011 20:53:53 +0100 roel <[email protected]> wrote:
Index i was already used in the outer loop.
Signed-off-by Roel Kluin <[email protected]>--- drivers/scsi/osst.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)I'm not sure if this is the right fix, maybe a break or return is missing?
What are you trying to fix with this patch?
Quoted 20 lines
drivers/scsi/osst.c +3
-3@@ -4702,8 +4702,9 @@ static int __os_scsi_tape_open(struct inode * inode, struct file * filp) STp->partition = STp->new_partition =0 ;if (STp->can_partitions) STp->nbr_partitions =1 ;/* This guess will be updated later if necessary */ -for (i=0 ; i <ST_NBR_PARTITIONS ; i++) { - STps = &(STp->ps[i]); +int j; +for (j=0 ; j <ST_NBR_PARTITIONS ; j++) { + STps = &(STp->ps[j]); STps->rw =ST_IDLE ; STps->eof =ST_NOEOF ; STps->at_sm =0 ; --To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 10 lines · FUJITA Tomonori
Quoted 7 lines · On Sat, 19 Mar 2011 20:53:53 +0100 roel <[email protected]> wrote:
Index i was already used in the outer loop.
Signed-off-by Roel Kluin <[email protected]>--- drivers/scsi/osst.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
Quoted 4 lines
Quoted 2 lines
I'm not sure if this is the right fix, maybe a break or return is missing?
What are you trying to fix with this patch?
`i' is used as an index in both the outer loop at 4689 and the inner loop at 4705.
if the UNIT_ATTENTION branch is taken `i' is overwritten after the loop at 4705 and becomes ST_NBR_PARTITIONS + 1, i.e. 5.
So the loop at 4689 may not loop ten times when the UNIT_ATTENTION branch is taken. It may loop 5 times or more than ten or hot spin, dependent how often the UNIT_ATTENTION branch is taken. I'm not familiar with this driver, but it looked buggy to me.
Roel