graid3 device gives "Invalid argument" when requested to read >=128kb

Vasil Dimov vd at FreeBSD.org
Fri Dec 29 06:56:59 PST 2006


Hi,

I managed to create a graid3 array which returns "Invalid argument" when
I attempt to read more than 128k with a single read(2) call.

Here is the test program:

--- graid3_test.c begins here ---
#include <sys/types.h>
#include <sys/uio.h>

#include <assert.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int
main(int argc, char **argv)
{
	char	buf[1048576];
	int	fd;
	ssize_t	ret;

	assert((fd = open("/dev/raid3/r3test", O_RDONLY)) != -1);

	if ((ret = read(fd, buf, 8192*16)) == -1)
		printf("%s\n", strerror(errno));
	else
		printf("ret: %zd\n", ret);

	close(fd);

	return 0;
}

/* EOF */
--- graid3_test.c ends here ---


# ./graid3_test
Invalid argument

If I change 8192*16 to 8192*15 it works fine:

# ./graid3_test
ret: 122880

This is what /dev/raid3/r3test looks like
(notice the sector size is 8192, that's why my test program is using
multiples of 8192):

# graid3 list
Geom name: r3test
State: COMPLETE
Components: 17
Flags: NONE
GenID: 0
SyncID: 1
ID: 4285731808
Zone64kFailed: 0
Zone64kRequested: 0
Zone16kFailed: 0
Zone16kRequested: 32
Zone4kFailed: 0
Zone4kRequested: 1280
Providers:
1. Name: raid3/r3test
   Mediasize: 536862720 (512M)
   Sectorsize: 8192
   Mode: r0w0e0
Consumers:
1. Name: ggate100
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 0
   Type: DATA
2. Name: ggate101
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 1
   Type: DATA
3. Name: ggate102
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 2
   Type: DATA
4. Name: ggate103
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 3
   Type: DATA
5. Name: ggate104
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 4
   Type: DATA
6. Name: ggate105
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 5
   Type: DATA
7. Name: ggate106
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 6
   Type: DATA
8. Name: ggate107
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 7
   Type: DATA
9. Name: ggate108
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 8
   Type: DATA
10. Name: ggate109
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 9
   Type: DATA
11. Name: ggate110
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 10
   Type: DATA
12. Name: ggate111
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 11
   Type: DATA
13. Name: ggate112
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 12
   Type: DATA
14. Name: ggate113
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 13
   Type: DATA
15. Name: ggate114
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 14
   Type: DATA
16. Name: ggate115
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 15
   Type: DATA
17. Name: ggate116
   Mediasize: 33554432 (32M)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Flags: NONE
   GenID: 0
   SyncID: 1
   Number: 16
   Type: PARITY

No such problems occur if the raid3 array is created with 9 (not 17)
disks.

Cheerz!

-- 
Vasil Dimov
gro.DSBeerF at dv
%
Never be afraid to tell the world who you are.
                -- Anonymous
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 155 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-geom/attachments/20061229/32de8ad0/attachment.pgp


More information about the freebsd-geom mailing list