public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [Ubuntu PATCH] CDROMEJECT cannot eject some devices
@ 2006-07-03 20:46 Randy Dunlap
  2006-07-03 21:04 ` Matthew Wilcox
  2006-07-03 21:10 ` James Bottomley
  0 siblings, 2 replies; 3+ messages in thread
From: Randy Dunlap @ 2006-07-03 20:46 UTC (permalink / raw)
  To: lkml; +Cc: akpm, axboe, jejb, scsi


Fix the bug where CDROMEJECT cannot eject some devices.

bug discussion: https://bugzilla.ubuntu.com/show_bug.cgi?id=5049

Patch location:
http://www.kernel.org/git/?p=linux/kernel/git/bcollins/ubuntu-dapper.git;a=commitdiff;h=f431f87fc9ac9ba248f43662ef9da9cdaa3418c2

---
 block/scsi_ioctl.c |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

--- linux-2617-g21.orig/block/scsi_ioctl.c
+++ linux-2617-g21/block/scsi_ioctl.c
@@ -501,7 +501,7 @@ static int __blk_send_generic(request_qu
 	struct request *rq;
 	int err;
 
-	rq = blk_get_request(q, WRITE, __GFP_WAIT);
+	rq = blk_get_request(q, READ, __GFP_WAIT);
 	rq->flags |= REQ_BLOCK_PC;
 	rq->data = NULL;
 	rq->data_len = 0;
@@ -521,6 +521,11 @@ static inline int blk_send_start_stop(re
 	return __blk_send_generic(q, bd_disk, GPCMD_START_STOP_UNIT, data);
 }
 
+static inline int blk_send_allow_medium_removal(request_queue_t *q, struct gendisk *bd_disk)
+{
+	return __blk_send_generic(q, bd_disk, GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL, 0);
+}
+
 int scsi_cmd_ioctl(struct file *file, struct gendisk *bd_disk, unsigned int cmd, void __user *arg)
 {
 	request_queue_t *q;
@@ -645,7 +650,11 @@ int scsi_cmd_ioctl(struct file *file, st
 			err = blk_send_start_stop(q, bd_disk, 0x03);
 			break;
 		case CDROMEJECT:
-			err = blk_send_start_stop(q, bd_disk, 0x02);
+			err = 0;
+
+			err |= blk_send_allow_medium_removal(q, bd_disk);
+			err |= blk_send_start_stop(q, bd_disk, 0x01);
+			err |= blk_send_start_stop(q, bd_disk, 0x02);
 			break;
 		default:
 			err = -ENOTTY;


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Ubuntu PATCH] CDROMEJECT cannot eject some devices
  2006-07-03 20:46 [Ubuntu PATCH] CDROMEJECT cannot eject some devices Randy Dunlap
@ 2006-07-03 21:04 ` Matthew Wilcox
  2006-07-03 21:10 ` James Bottomley
  1 sibling, 0 replies; 3+ messages in thread
From: Matthew Wilcox @ 2006-07-03 21:04 UTC (permalink / raw)
  To: Randy Dunlap; +Cc: lkml, akpm, axboe, jejb, scsi

On Mon, Jul 03, 2006 at 01:46:24PM -0700, Randy Dunlap wrote:
> 
> Fix the bug where CDROMEJECT cannot eject some devices.

> --- linux-2617-g21.orig/block/scsi_ioctl.c
> +++ linux-2617-g21/block/scsi_ioctl.c
> @@ -501,7 +501,7 @@ static int __blk_send_generic(request_qu
>  	struct request *rq;
>  	int err;
>  
> -	rq = blk_get_request(q, WRITE, __GFP_WAIT);
> +	rq = blk_get_request(q, READ, __GFP_WAIT);

I don't believe this hunk is necessary for mainline.  IIRC, there was a
bug around length checks vs read vs write which is now fixed.
Presumably it's still needed in Ubuntu's kernel though.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Ubuntu PATCH] CDROMEJECT cannot eject some devices
  2006-07-03 20:46 [Ubuntu PATCH] CDROMEJECT cannot eject some devices Randy Dunlap
  2006-07-03 21:04 ` Matthew Wilcox
@ 2006-07-03 21:10 ` James Bottomley
  1 sibling, 0 replies; 3+ messages in thread
From: James Bottomley @ 2006-07-03 21:10 UTC (permalink / raw)
  To: Randy Dunlap; +Cc: lkml, akpm, axboe, scsi

On Mon, 2006-07-03 at 13:46 -0700, Randy Dunlap wrote:
> -			err = blk_send_start_stop(q, bd_disk, 0x02);
> +			err = 0;
> +
> +			err |= blk_send_allow_medium_removal(q, bd_disk);

This piece is clearly wrong.  If the medium has physically been locked
(and the lock is managed by the cdrom layer) then we don't want to be
overriding it.  It should be up to the user or the tools to figure out
who has it open or mounted and take the appropriate action.

> +			err |= blk_send_start_stop(q, bd_disk, 0x01);

And this looks unnecessary.  Why does the device need to be started to
eject its medium?

> +			err |= blk_send_start_stop(q, bd_disk, 0x02);

James



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-07-03 21:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-03 20:46 [Ubuntu PATCH] CDROMEJECT cannot eject some devices Randy Dunlap
2006-07-03 21:04 ` Matthew Wilcox
2006-07-03 21:10 ` James Bottomley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox