> >    fdisk -R -W - /dev/rdsk/c1t0d0p0
> 
> Here's the output:
> 
> # /sbin/fdisk -R -W - /dev/rdsk/c1t0d0p0
> 

> * Id    Act  Bhead  Bsect  Bcyl    Ehead  Esect  Ecyl    Rsect    Numsect
> 7 128  1      1      0       254    63     1023    63       558788832
> 15    0    0      1      1023    254    63     1023    558788895 66348450

I think I found something.  The problem is that your FAT32 volume is
defined inside an extended fdisk partition.  The extended fdisk 
partition that you have defined on that disk is the one tagged with
"Id 15"; the FAT32 fdisk partition inside that extended fdisk partition
isn't visible in Solaris' fdisk output.

Root cause of the problem is that tamarack / hald includes the
Id 15 extended fdisk partition as a "dos drive" while the kernel
pcfs filesystem module does not.

Hald:
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/hal/utils/fsutils.c#is_dos_drive

kernel pcfs:
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/fs/pcfs/pc_vfsops.c#isDosDrive


If you change hal's fsutils.c, function is_dos_drive(), to match the
same fdisk partition ids that are used in the kernel pcfs module, 
re-compile and install the new /usr/lib/hal/hald-probe-storage and
/usr/lib/hal/hald-probe-volume binaries, then your usb disk should mount.

==================================================================

Suggested fix
=============

The list of dos fdisk partition ids used in hal and the pcfs module
should match.

An extended fdisk partition doesn't contain a fat filesystem!

fdisk partition ids 5, 15 should be deleted from 
usr/src/cmd/hal/utils/fsutils.c is_dos_drive():


diff -r eb8f709e6f16 usr/src/cmd/hal/utils/fsutils.c
--- a/usr/src/cmd/hal/utils/fsutils.c   Wed Jan 31 04:59:22 2007 -0800
+++ b/usr/src/cmd/hal/utils/fsutils.c   Fri Feb 02 01:08:31 2007 +0100
@@ -85,8 +85,10 @@ boolean_t
 boolean_t
 is_dos_drive(uchar_t type)
 {
-       return ((type == 1) || (type == 4) || (type == 5) || (type == 6) ||
-           ((type >= 8) && (type <= 0xf)));
+       return ((type == DOSOS12) || (type == DOSOS16) ||
+           (type == DOSHUGE) || (type == FDISK_WINDOWS) ||
+           (type == FDISK_EXT_WIN) || (type == FDISK_FAT95) ||
+           (type == DIAGPART));
 }
 
 boolean_t
 
 
This message posted from opensolaris.org
_______________________________________________
opensolaris-help mailing list
[email protected]

Reply via email to