10 /* test thanks to judith@sgi.com */
12 #define IO_SIZE 1048576
22 main(int argc, char *argv[])
35 fprintf(stderr, "%s <loops> <file>\n", argv[0]);
40 loops = strtoull(argv[1], NULL, 0);
49 fd = open(file, O_RDWR|O_CREAT|O_DIRECT, 0666);
54 if (xfsctl(file, fd, XFS_IOC_DIOINFO, &dio) < 0) {
59 dio_env = getenv("XFS_DIO_MIN");
61 dio.d_mem = dio.d_miniosz = atoi(dio_env);
63 if ((dio.d_miniosz > IO_SIZE) || (dio.d_maxiosz < IO_SIZE)) {
64 fprintf(stderr, "Test won't work - iosize out of range"
65 " (dio.d_miniosz=%d, dio.d_maxiosz=%d)\n",
66 dio.d_miniosz, dio.d_maxiosz);
70 buf = (char *)memalign(dio.d_mem , IO_SIZE);
72 fprintf(stderr,"Can't get memory\n");
75 memset(buf,'Z',IO_SIZE);
80 flock.l_len = IO_SIZE*21;
81 if (xfsctl(file, fd, XFS_IOC_RESVSP64, &flock) < 0) {
85 for (i = 0; i < 21; i++) {
86 if (pwrite(fd, buf, IO_SIZE, offset) != IO_SIZE) {
93 print_getbmapx(file, fd, 0, 0);
95 if (ftruncate(fd, 0)) {
100 print_getbmapx(file, fd, 0, 0);
108 const char *pathname,
113 struct getbmapx bmapx[50];
114 int array_size = sizeof(bmapx) / sizeof(bmapx[0]);
121 memset(bmapx, '\0', sizeof(bmapx));
123 bmapx[0].bmv_offset = start;
124 bmapx[0].bmv_length = -1; /* limit - start; */
125 bmapx[0].bmv_count = array_size;
126 bmapx[0].bmv_entries = 0; /* no entries filled in yet */
128 bmapx[0].bmv_iflags = BMV_IF_PREALLOC;
132 if (x > bmapx[0].bmv_entries) {
133 if (x != array_size) {
134 break; /* end of file */
136 if (xfsctl(pathname, fd, XFS_IOC_GETBMAPX, bmapx) < 0) {
137 fprintf(stderr, "XFS_IOC_GETBMAPX failed\n");
140 if (bmapx[0].bmv_entries == 0) {
143 x = 1; /* back at first extent in buffer */
145 if (bmapx[x].bmv_oflags & 1) {
146 fprintf(stderr, "FOUND ONE %lld %lld %x\n",
147 (long long) bmapx[x].bmv_offset,
148 (long long) bmapx[x].bmv_length,
149 bmapx[x].bmv_oflags);
157 fprintf(stderr,"Repeat\n");