Re: [PATCH] 64 bit scsi read/write

Ragnar Kjørstad
2001-08-10T19:51:51Z

On Thu, Jul 26, 2001 at 04:18:21AM +0200, Ragnar Kjørstad wrote:
> On Tue, Jul 03, 2001 at 10:19:36PM -0400, Ben LaHaise wrote:
> > Here's the [completely untested] generic scsi fixup, but I'm told that
> > some controllers will break with it. Give it a whirl and let me know how
> > many pieces you're left holding. =) Please note that msdos partitions do
> > *not* work on devices larger than 2TB, so you'll have to use the scsi disk
> > directly. This patch applies on top of v2.4.6-pre8-largeblock4.diff.
>
> I just trid this, but when I can't load the md modules becuase of
> missing symbols for __divdi3 and __umoddi3.

I compiled md and lvm into the kernel rather than modules and got a
little futher:

* raid 0 over 4*600GB devices:
* made filesystem
* tried reading of the end of the device (dd skip=xx)
all tests successful

* >1TB devices over scsi.
* /proc/partitions report incorrect sizes
[root@K2 /root]# cat /proc/partitions
major minor #blocks name
8 0 17921835 sda
8 1 56196 sda1
8 2 1 sda2
8 5 13076878 sda5
8 6 530113 sda6
8 16 9223372035816620928 sdb
8 32 9223372035975108096 sdc
* mkreiserfs fails: "mkreiserfs: can not create filesystem on that
small device (0 blocks)."
* mkfs.xfs fails: "warning - cannot set blocksize on block device
/dev/sdb: Invalid argument"
I assume both mkreiserfs and mkfs.xfs use ioctl to get the size
of the device, and that ioctl uses an unsigned int? How is
userspace supposed to get the devicesize of >2GB devices with
your code?
* mkfs.ext2 makes the machine panic after a while.
Unfortenately I don't have the panic message anymore, and at the
moment I don't have the hardware to redo the test.
* fdisk bails out with 'Unable to read /dev/sdb'
Strace shows:
open("/dev/sdb", O_RDWR) = 3
uname({sys="Linux", node="K2.torque.com", ...}) = 0
ioctl(3, 0x1268, 0xbffff8f4) = 0
fstat64(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 16), ...}) = 0
ioctl(3, BLKGETSIZE, 0xbffff924) = 0
ioctl(3, HDIO_GETGEO, 0xbffff918) = 0
read(3, "", 512) = 0

--
Ragnar Kjorstad
Big Storage