Is the patch below acceptable?

Alan Stern



Index: usb-2.6/block/scsi_ioctl.c
===================================================================
--- usb-2.6.orig/block/scsi_ioctl.c
+++ usb-2.6/block/scsi_ioctl.c
@@ -97,6 +97,11 @@ static int sg_set_reserved_size(request_
 	return 0;
 }
 
+static int sg_get_max_transfer_length(request_queue_t *q, int __user *p)
+{
+	return put_user(q->max_sectors << 9, p);
+}
+
 /*
  * will always return that we are ATAPI even for a real SCSI drive, I'm not
  * so sure this is worth doing anything about (why would you care??)
@@ -558,6 +563,9 @@ int scsi_cmd_ioctl(struct file *file, st
 		case SG_SET_RESERVED_SIZE:
 			err = sg_set_reserved_size(q, arg);
 			break;
+		case SG_GET_MAX_TRANSFER_LENGTH:
+			err = sg_get_max_transfer_length(q, arg);
+			break;
 		case SG_EMULATED_HOST:
 			err = sg_emulated_host(q, arg);
 			break;
Index: usb-2.6/drivers/scsi/sg.c
===================================================================
--- usb-2.6.orig/drivers/scsi/sg.c
+++ usb-2.6/drivers/scsi/sg.c
@@ -927,6 +927,11 @@ sg_ioctl(struct inode *inode, struct fil
 	case SG_GET_RESERVED_SIZE:
 		val = (int) sfp->reserve.bufflen;
 		return put_user(val, ip);
+	case SG_GET_MAX_TRANSFER_LENGTH:
+		if (sdp->detached || !sdp->device->request_queue)
+			return -ENODEV;
+		val = sdp->device->request_queue->max_sectors << 9;
+		return put_user(val, ip);
 	case SG_SET_COMMAND_Q:
 		result = get_user(val, ip);
 		if (result)
Index: usb-2.6/include/scsi/sg.h
===================================================================
--- usb-2.6.orig/include/scsi/sg.h
+++ usb-2.6/include/scsi/sg.h
@@ -219,6 +219,8 @@ typedef struct sg_req_info { /* used by 
 /* yields scsi midlevel's access_count for this SCSI device */
 #define SG_GET_ACCESS_COUNT 0x2289  
 
+/* Yields the SCSI device queue's max_sector value, in bytes */
+#define SG_GET_MAX_TRANSFER_LENGTH 0x228a
 
 #define SG_SCATTER_SZ (8 * 4096)
 /* Largest size (in bytes) a single scatter-gather list element can have.


