diff -uNr linux/drivers/usb/usb-storage.c linux-2.3.50/drivers/usb/usb-storage.c
--- linux/drivers/usb/usb-storage.c	Sun Feb 20 18:20:47 2000
+++ linux-2.3.50/drivers/usb/usb-storage.c	Sat Mar 11 16:51:25 2000
@@ -911,7 +911,7 @@
 			if (result != USB_ST_TIMEOUT)
 				break;
 		}
-		if (result) {
+		if (result<0) {
 			US_DEBUGP("Bad AP status request %d\n", result);
 			return DID_ABORT << 16;
 		}
@@ -979,7 +979,7 @@
 				 US_BULK_RESET, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
 				 US_BULK_RESET_HARD, us->ifnum,
 				 NULL, 0, HZ*5);
-	if (result)
+	if (result<0)
 		US_DEBUGP("Bulk hard reset failed %d\n", result);
 	usb_clear_halt(us->pusb_dev, usb_rcvbulkpipe(us->pusb_dev, us->ep_in));
 	usb_clear_halt(us->pusb_dev, usb_sndbulkpipe(us->pusb_dev, us->ep_out));
@@ -1668,6 +1668,8 @@
 		switch (ss->subclass) {
 		case US_SC_RBC:
 			US_DEBUGPX("Reduced Block Commands\n");
+			/* this should be interesting... */
+			ss->proto_handler = transparent_scsi_command;
 			break;
 
 		case US_SC_8020:
@@ -1700,7 +1702,7 @@
 		/* We only handle certain protocols.  Currently, these are
 		 *the only ones that devices use.
 		 */
-		if ((ss->subclass != US_SC_SCSI) && (ss->subclass != US_SC_UFI)) {
+		if ((ss->subclass != US_SC_SCSI) && (ss->subclass != US_SC_UFI) && (ss->subclass != US_SC_RBC)) {
 			US_DEBUGP("Sorry, we do not support that protocol yet.\n");
 			US_DEBUGP("If you have a device which uses one of the unsupported\n");
 			US_DEBUGP("protocols, please contact mdharm-usb@one-eyed-alien.net\n");
@@ -1746,7 +1748,7 @@
 			ss->irqpipe = usb_rcvintpipe(ss->pusb_dev, ss->ep_int);
 			result = usb_request_irq(ss->pusb_dev, ss->irqpipe, CBI_irq,
 						 255, (void *)ss, &ss->irq_handle);
-			if (result)
+			if (result<0)
 				return NULL;
 
 			interruptible_sleep_on_timeout(&ss->ip_waitq, HZ*6);
