10 #include "common/safe_io.h"
11 #include "os/btrfs_ioctl.h"
13 void do_open_wr(const char *fname, int *fd)
15 *fd = open(fname, O_WRONLY | O_CREAT, 0644);
22 void do_open_rd(const char *fname, int *fd)
24 *fd = open(fname, O_RDONLY);
31 void do_lseek(int fd, int ofs)
33 int rc = lseek(fd, ofs, SEEK_SET);
40 void do_write(int fd, int len)
42 char *buf = malloc(len);
45 printf("not enough memory\n");
50 rc = safe_write(fd, buf, len);
52 fprintf(stderr, "safe_write failed with error %d (%s)\n",
58 printf("invalid number of bytes written\n");
65 void do_link(const char *old, const char *new)
67 int rc = link(old, new);
74 void do_clone_range(int from, int to, int off, int len)
76 struct btrfs_ioctl_clone_range_args a;
83 r = ioctl(to, BTRFS_IOC_CLONE_RANGE, &a);
90 void do_snap_async(int fd, const char *name, unsigned long long *transid)
92 struct btrfs_ioctl_async_vol_args async_args;
93 struct btrfs_ioctl_vol_args volargs;
96 strcpy(volargs.name, name);
99 async_args.args = &volargs;
100 async_args.transid = transid;
102 r = ioctl(fd, BTRFS_IOC_SNAP_CREATE_ASYNC, &async_args);
110 void do_snap_destroy(int fd, const char *name)
112 struct btrfs_ioctl_vol_args volargs;
115 strcpy(volargs.name, name);
118 r = ioctl(fd, BTRFS_IOC_SNAP_DESTROY, &volargs);
121 perror("snap_destroy: ioctl");
126 void do_snap_wait(int fd, unsigned long long transid)
128 int r = ioctl(fd, BTRFS_IOC_WAIT_SYNC, &transid);
130 perror("do_snap_wait: ioctl");
135 void usage_exit(char *arg)
137 printf("usage: %s <btrfs_base> <snap_name>\n", arg);
141 #define TEMP_FILENAME "temp"
142 #define DEST_FILENAME "dest"
143 #define SRC_FILENAME "src"
145 int main(int argc, char *argv[])
147 const char *base_dir;
148 const char *snap_name;
152 unsigned long long transid;
160 for (i=0; i<10; i++) {
162 do_open_rd(base_dir, &fd);
163 do_snap_async(fd, snap_name, &transid);
165 //do_snap_wait(fd, transid);
166 do_snap_destroy(fd, snap_name);