sg O_EXCL on open() lk 2.6.0-test9
Subsystems (2)
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);