Skip to contentSkip to conversation

osst: wrong index used in inner loop

PATCH In review roel 2 participants 3 messages Mar 19, 2011 – Mar 21, 2011 SCSI

lore
Share & tools
lore

roel

author
#0 lore raw

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
index 521e218..d6d6d89 100644
@@ -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;
#1 lore raw
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.

---
 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
index 521e218..d6d6d89 100644
@@ -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

author
#2 lore raw
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.

---
 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