8 /* test thanks to judith@sgi.com */
10 #define IO_SIZE 1048576
20 main(int argc, char *argv[])
33 fprintf(stderr, "%s <loops> <file>\n", argv[0]);
38 loops = strtoull(argv[1], NULL, 0);
47 fd = open(file, O_RDWR|O_CREAT|O_DIRECT, 0666);
52 if (xfsctl(file, fd, XFS_IOC_DIOINFO, &dio) < 0) {
57 dio_env = getenv("XFS_DIO_MIN");
59 dio.d_mem = dio.d_miniosz = atoi(dio_env);
61 if ((dio.d_miniosz > IO_SIZE) || (dio.d_maxiosz < IO_SIZE)) {
62 fprintf(stderr, "Test won't work - iosize out of range"
63 " (dio.d_miniosz=%d, dio.d_maxiosz=%d)\n",
64 dio.d_miniosz, dio.d_maxiosz);
68 buf = (char *)memalign(dio.d_mem , IO_SIZE);
70 fprintf(stderr,"Can't get memory\n");
73 memset(buf,'Z',IO_SIZE);
78 flock.l_len = IO_SIZE*21;
79 if (xfsctl(file, fd, XFS_IOC_RESVSP64, &flock) < 0) {
83 for (i = 0; i < 21; i++) {
84 if (pwrite(fd, buf, IO_SIZE, offset) != IO_SIZE) {
91 print_getbmapx(file, fd, 0, 0);
96 xfsctl(file, fd, XFS_IOC_FREESP64, &flock);
97 print_getbmapx(file, fd, 0, 0);
105 const char *pathname,
110 struct getbmapx bmapx[50];
111 int array_size = sizeof(bmapx) / sizeof(bmapx[0]);
118 memset(bmapx, '\0', sizeof(bmapx));
120 bmapx[0].bmv_offset = start;
121 bmapx[0].bmv_length = -1; /* limit - start; */
122 bmapx[0].bmv_count = array_size;
123 bmapx[0].bmv_entries = 0; /* no entries filled in yet */
125 bmapx[0].bmv_iflags = BMV_IF_PREALLOC;
129 if (x > bmapx[0].bmv_entries) {
130 if (x != array_size) {
131 break; /* end of file */
133 if (xfsctl(pathname, fd, XFS_IOC_GETBMAPX, bmapx) < 0) {
134 fprintf(stderr, "XFS_IOC_GETBMAPX failed\n");
137 if (bmapx[0].bmv_entries == 0) {
140 x = 1; /* back at first extent in buffer */
142 if (bmapx[x].bmv_oflags & 1) {
143 fprintf(stderr, "FOUND ONE %lld %lld %x\n",
144 (long long) bmapx[x].bmv_offset,
145 (long long) bmapx[x].bmv_length,
146 bmapx[x].bmv_oflags);
154 fprintf(stderr,"Repeat\n");