diff --git a/src/client/test_ioctls.c b/src/client/test_ioctls.c index 1792084fa6c..cfce167a08e 100644 --- a/src/client/test_ioctls.c +++ b/src/client/test_ioctls.c @@ -19,6 +19,7 @@ int main(int argc, char **argv) int fd, err; struct ceph_ioctl_layout l; struct ceph_ioctl_dataloc dl; + char *new_file_name = (char *)malloc(sizeof(char)*4096); if (argc < 3) { printf("usage: test_ioctls \n"); @@ -31,15 +32,35 @@ int main(int argc, char **argv) perror("couldn't open file"); return 1; } - printf("file %s\n", fn); /* get layout */ + err = ioctl(fd, CEPH_IOC_GET_LAYOUT, (unsigned long)&l); + if (err < 0) { + perror("ioctl IOC_GET_LAYOUT error"); + return 1; + } + printf("layout:\n stripe_unit %lld\n stripe_count %lld\n object_size %lld\n data_pool %lld\n preferred osd %lld\n", + (long long)l.stripe_unit, (long long)l.stripe_count, (long long)l.object_size, (long long)l.data_pool, (long long)l.preferred_osd); + + + /* set layout */ + l.stripe_unit = 1048576; + l.stripe_count = 2; + err = ioctl(fd, CEPH_IOC_SET_LAYOUT, (unsigned long)&l); + if (err < 0) { + perror("ioctl IOC_SET_LAYOUT error"); + return 1; + } + printf("set layout, writing to file\n"); + + printf("file %s\n", fn); + /* get layout again */ err = ioctl(fd, CEPH_IOC_GET_LAYOUT, (unsigned long)&l); if (err < 0) { perror("ioctl IOC_GET_LAYOUT error"); return 1; } - printf("layout:\n stripe_unit %lld\n stripe_count %lld\n object_size %lld\n data_pool %lld\npreferred osd %lld\n", + printf("layout:\n stripe_unit %lld\n stripe_count %lld\n object_size %lld\n data_pool %lld\n preferred osd %lld\n", (long long)l.stripe_unit, (long long)l.stripe_count, (long long)l.object_size, (long long)l.data_pool, (long long)l.preferred_osd); /* dataloc */ @@ -61,5 +82,38 @@ int main(int argc, char **argv) getnameinfo((struct sockaddr *)&dl.osd_addr, sizeof(dl.osd_addr), buf, sizeof(buf), 0, 0, NI_NUMERICHOST); printf(" osd%lld %s\n", (long long)dl.osd, buf); - return 0; + if (argc < 4) + return 0; + + /* set dir default layout */ + printf("testing dir policy setting\n"); + fd = open(argv[3], O_RDONLY); + if (fd < 0) { + perror("couldn't open dir"); + return 1; + } + + l.object_size = 1048576; + l.stripe_count = 1; + err = ioctl(fd, CEPH_IOC_SET_LAYOUT_POLICY, (unsigned long)&l); + if (err < 0) { + perror("ioctl IOC_SET_LAYOUT_POLICY error"); + return 1; + } + printf("set layout, creating file\n"); + + sprintf(new_file_name, "%s/testfile", argv[3]); + fd = open(new_file_name, O_CREAT | O_RDWR, 0644); + if (fd < 0) { + perror("couldn't open file"); + return 1; + } + err = ioctl(fd, CEPH_IOC_GET_LAYOUT, (unsigned long)&l); + if (err < 0) { + perror("ioctl IOC_GET_LAYOUT error"); + return 1; + } + printf("layout:\n stripe_unit %lld\n stripe_count %lld\n object_size %lld\n data_pool %lld\n preferred osd %lld\n", + (long long)l.stripe_unit, (long long)l.stripe_count, (long long)l.object_size, (long long)l.data_pool, (long long)l.preferred_osd); + return 0; }