8 /* test thanks to judith@sgi.com */
10 #define IO_SIZE 1048576
20 main(int argc, char *argv[])
32 fprintf(stderr, "%s <loops> <file>\n", argv[0]);
37 loops = strtoull(argv[1], NULL, 0);
46 fd = open(file, O_RDWR|O_CREAT|O_DIRECT, 0666);
51 if (xfsctl(file, fd, XFS_IOC_DIOINFO, &dio) < 0) {
56 if ((dio.d_miniosz > IO_SIZE) || (dio.d_maxiosz < IO_SIZE)) {
57 fprintf(stderr, "Test won't work - iosize out of range"
58 " (dio.d_miniosz=%d, dio.d_maxiosz=%d)\n",
59 dio.d_miniosz, dio.d_maxiosz);
63 buf = (char *)memalign(dio.d_mem , IO_SIZE);
65 fprintf(stderr,"Can't get memory\n");
68 memset(buf,'Z',IO_SIZE);
73 flock.l_len = IO_SIZE*21;
74 if (xfsctl(file, fd, XFS_IOC_RESVSP64, &flock) < 0) {
78 for (i = 0; i < 21; i++) {
79 if (pwrite(fd, buf, IO_SIZE, offset) != IO_SIZE) {
86 print_getbmapx(file, fd, 0, 0);
91 xfsctl(file, fd, XFS_IOC_FREESP64, &flock);
92 print_getbmapx(file, fd, 0, 0);
100 const char *pathname,
105 struct getbmapx bmapx[50];
106 int array_size = sizeof(bmapx) / sizeof(bmapx[0]);
113 memset(bmapx, '\0', sizeof(bmapx));
115 bmapx[0].bmv_offset = start;
116 bmapx[0].bmv_length = -1; /* limit - start; */
117 bmapx[0].bmv_count = array_size;
118 bmapx[0].bmv_entries = 0; /* no entries filled in yet */
120 bmapx[0].bmv_iflags = BMV_IF_PREALLOC;
124 if (x > bmapx[0].bmv_entries) {
125 if (x != array_size) {
126 break; /* end of file */
128 if (xfsctl(pathname, fd, XFS_IOC_GETBMAPX, bmapx) < 0) {
129 fprintf(stderr, "XFS_IOC_GETBMAPX failed\n");
132 if (bmapx[0].bmv_entries == 0) {
135 x = 1; /* back at first extent in buffer */
137 if (bmapx[x].bmv_oflags & 1) {
138 fprintf(stderr, "FOUND ONE %lld %lld %x\n",
139 bmapx[x].bmv_offset, bmapx[x].bmv_length,bmapx[x].bmv_oflags);
147 fprintf(stderr,"Repeat\n");