Skip to contentSkip to conversation

sg O_EXCL on open() lk 2.6.0-test9

PATCH New Douglas Gilbert 1 participant 1 message Nov 16, 2003

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sg O_EXCL on open() lk 2.6.0-test9

While on the subject of bugs in sg, one came
to light recently (only in lk 2.6, not lk 2.4).

Changelog:
When detecting a locked sg device (O_EXCL) return -EBUSY (rather than 0) from sg_open()

Doug Gilbert

drivers/scsi/sg.c260t9ma renamed from drivers/scsi/sg.c +7 -3
@@ -243,7 +243,7 @@
 	Sg_device *sdp;
 	Sg_fd *sfp;
 	int res;
-	int retval = -EBUSY;
+	int retval;
 
 	SCSI_LOG_TIMEOUT(3, printk("sg_open: dev=%d, flags=0x%x\n", dev, flags));
 	sdp = sg_get_dev(dev);
@@ -270,8 +270,10 @@
 			retval = -EPERM; /* Can't lock it with read only access */
 			goto error_out;
 		}
-		if (sdp->headfp && (flags & O_NONBLOCK))
+		if (sdp->headfp && (flags & O_NONBLOCK)) {
+			retval = -EBUSY;
 			goto error_out;
+		}
 		res = 0;
 		__wait_event_interruptible(sdp->o_excl_wait,
 			((sdp->headfp || sdp->exclude) ? 0 : (sdp->exclude = 1)), res);
@@ -280,8 +282,10 @@
 			goto error_out;
 		}
 	} else if (sdp->exclude) {	/* some other fd has an exclusive lock on dev */
-		if (flags & O_NONBLOCK)
+		if (flags & O_NONBLOCK) {
+			retval = -EBUSY;
 			goto error_out;
+		}
 		res = 0;
 		__wait_event_interruptible(sdp->o_excl_wait, (!sdp->exclude),
 					   res);