IMO, large (32-bit instead of 18-bit) minor numbers are a farce in Solaris. You can *only* use them from a 64-bit process -- you can't even open() a device with a large minor number from a 32-bit process.

I'm not sure the filesystems can properly represent a large minor number either. (I think some have only 32-bits for the entire devt.)

I believe that makes them almost completely useless. I had hoped to be able to use clone opens with large numbers in another project I was using, and that didn't work with 32-bit programs either.

I don't think we should go too far out of our way to enable such minor nodes to be transported via rsync -- if folks have filesystems with them on them its more likely the result of a bug than actual intention.

   -- Garrett

Milan Jurik wrote:
Hi,

we are looking for guidance how to solve "interoperability" problem with
rsync. Robert reported problem with rsync from BSD to Solaris box, where
32-bit rsync fails. He compiled 64-bit rsync and that works without
problem. After some investigation he discovered that problem is with
e.g.:

# /usr/bin/ls -l dev/mdctl
dev/mdctl: Value too large for defined data type

# truss -t lstat /usr/bin/ls -l dev/mdctl
lstat64("dev/mdctl", 0x08046930)                Err#79 EOVERFLOW
dev/mdctl: Value too large for defined data type

lets try 64bit version of ls:

# /usr/bin/amd64/ls -l dev/mdctl
crw-------   1 root     root     235, 4294902015 Sep 13  2006
dev/mdctl

After additional investigation he found that for 32-bit userspace we
limit minor to L_MAXMIN32 (because we want major+minor to fit in 32-bit
value). But only for 32-bit userspace. We allow to create bigger minors
in 64-bit userspace.

For 32-bit limit of time members in stat structure we can claim that
time outside of 32-bit range is (and will be for next 30 years) invalid
(and even ZFS has test for it), but what about minor number comming from
other systems (yes, unusual case, used only for backups)?

For people with access to Bugster, you can see some comments in CR

6248065 *ls* should be isaexec'ed (64bit on 64bit kernel, 32bit on 32bit
kernel)

And now the question - how to deal with this situation? Should we
deliver 64-bit rsync? There are no tools on Solaris to deal with such
files. Or should we discourage to bundle such tool? Should filesystems
block creating of these minors?

Best regards,

Milan

_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to