Originally posted by Seadzz
If you use Linux and are having a problem making UMS firmware work this could be your ticket to heaven....or where ever.
Many thanks for this info to forum member Legoguy
Problem Description:
iRiver USB Mass Storage firmware does not support the ALLOW_MEDIUM_REMOVAL flag,
and hangs when it is sent, therefore making the filesystem on the player
inaccessible.
Steps to reproduce:
1. Plug in an iRiver iFP-xxxT with iRiver's UMS firmware
2. Watch as dmesg reports thread sleeping/awaking and other not-so-good things
3. Try `mount -t vfat /dev/sda /mnt/ifp` and it reports either non block device
or bad superblock
This is more of a bug-fixing-report, here's a patch from Javier Marcet, against
the 2.6.4 kernel sources, thet fixes the problem; Credit goes to him and the
other people involved in this SourceForge thread:
http://sourceforge.net/mailarchive/foru ... m_id=18786
Patch:
--- linux/include/scsi/scsi_devinfo.h.orig 2004-01-06 01:00:29.000000000 +0100
+++ linux/include/scsi/scsi_devinfo.h 2004-01-06 20:15:50.036892568 +0100
@@ -19,4 +19,5 @@
#define BLIST_MS_SKIP_PAGE_0 8 0x2000 /* do not send ms page 0x08 */
#define BLIST_MS_SKIP_PAGE_3 F 0x4000 /* do not send ms page 0x3f */
#define BLIST_USE_10_BYTE_MS 0x8000 /* use 10 byte ms before 6 byte ms */
+#define BLIST_NORMB 0x10000 /* Known to be not removable */
#endif
--- linux/drivers/scsi/scsi_scan.c.orig 2004-01-06 01:00:29.000000000 +0100
+++ linux/drivers/scsi/scsi_scan.c 2004-01-06 20:10:19.731106680 +0100
@@ -536,7 +536,8 @@
sdev->online = FALSE;
}
- sdev->removable = (0x80 & inq_result[1]) >> 7;
+ sdev->removable = (((0x80 & inq_result[1]) >> 7) &&
+ !(*bflags & BLIST_NORMB));
sdev->lockable = sdev->removable;
sdev->soft_reset = (inq_result[7] & 1) && ((inq_result[3] & 7) == 2);
--- linux/drivers/scsi/scsi_devinfo.c.orig 2004-01-06 01:00:29.000000000 0100
+++ linux/drivers/scsi/scsi_devinfo.c 2004-01-06 20:13:46.890613648 +0100
@@ -183,6 +183,7 @@
{"SGI", "TP9500", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
{"MYLEX", "DACARMRB", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
{"XYRATEX", "RS", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
+ {"iRiver", "iFP Mass Driver", NULL, BLIST_NORMB},
{ NULL, NULL, NULL, 0 },
};
See also:
http://www.ussg.iu.edu/hypermail/linux/ ... .html#0930