On Saturday, 30 October, 2010, Sage Weil wrote: > The 'start-sync' command initiates a sync, but does not wait for it to > complete. A transaction is printed that can be fed to 'wait-sync', which > will wait for it to commit. > > 'wait-sync' can also be used in combination with 'async-snapshot' to wait > for an async snapshot creation to commit.
As previous, if you add or update a command, please update the man page too. > > Signed-off-by: Sage Weil <s...@newdream.net> > --- > btrfs.c | 9 +++++++++ > btrfs_cmds.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ > btrfs_cmds.h | 2 ++ > 3 files changed, 60 insertions(+), 0 deletions(-) > > diff --git a/btrfs.c b/btrfs.c > index c4b9a31..d45ac1f 100644 > --- a/btrfs.c > +++ b/btrfs.c > @@ -83,6 +83,15 @@ static struct Command commands[] = { > "filesystem sync", "<path>\n" > "Force a sync on the filesystem <path>." > }, > + { do_start_sync, 1, > + "filesystem start-sync", "<path>\n" > + "Start a sync on the filesystem <path>, and print the resulting\n" > + "transaction id." > + }, > + { do_wait_sync, 2, > + "filesystem wait-sync", "<path> <transid>\n" > + "Wait for the transaction <transid> on the filesystem at <path> to commit." > + }, > { do_resize, 2, > "filesystem resize", "[+/-]<newsize>[gkm]|max <filesystem>\n" > "Resize the file system. If 'max' is passed, the filesystem\n" > diff --git a/btrfs_cmds.c b/btrfs_cmds.c > index 6da5862..5b5bb15 100644 > --- a/btrfs_cmds.c > +++ b/btrfs_cmds.c > @@ -548,6 +548,55 @@ int do_fssync(int argc, char **argv) > return 0; > } > > +int do_start_sync(int argc, char **argv) > +{ > + int fd, res; > + char *path = argv[1]; > + __u64 transid; > + > + fd = open_file_or_dir(path); > + if (fd < 0) { > + fprintf(stderr, "ERROR: can't access to '%s'\n", path); > + return 12; > + } > + > + printf("StartSync '%s'\n", path); > + res = ioctl(fd, BTRFS_IOC_START_SYNC, &transid); > + close(fd); > + if( res < 0 ){ > + fprintf(stderr, "ERROR: unable to fs-syncing '%s'\n", path); > + return 16; > + } else { > + printf("transid %llu\n", (unsigned long long)transid); > + } > + > + return 0; > +} > + > +int do_wait_sync(int argc, char **argv) > +{ > + int fd, res; > + char *path = argv[1]; > + __u64 transid = atoll(argv[2]); > + > + fd = open_file_or_dir(path); > + if (fd < 0) { > + fprintf(stderr, "ERROR: can't access to '%s'\n", path); > + return 12; > + } > + > + printf("WaitSync '%s' transid %llu\n", path, (unsigned long long)transid); > + res = ioctl(fd, BTRFS_IOC_WAIT_SYNC, &transid); > + close(fd); > + if( res < 0 ){ > + fprintf(stderr, "ERROR: unable to wait-sync on '%s' transid %llu: %s\n", path, > + (unsigned long long)transid, strerror(errno)); > + return 16; > + } > + > + return 0; > +} > + > int do_scan(int argc, char **argv) > { > int i, fd; > diff --git a/btrfs_cmds.h b/btrfs_cmds.h > index c44dc79..e0e5ceb 100644 > --- a/btrfs_cmds.h > +++ b/btrfs_cmds.h > @@ -20,6 +20,8 @@ int do_create_snap_async(int nargs, char **argv); > int do_delete_subvolume(int nargs, char **argv); > int do_create_subvol(int nargs, char **argv); > int do_fssync(int nargs, char **argv); > +int do_start_sync(int nargs, char **argv); > +int do_wait_sync(int nargs, char **argv); > int do_defrag(int argc, char **argv); > int do_show_filesystem(int nargs, char **argv); > int do_add_volume(int nargs, char **args); > -- > 1.7.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- gpg key@ keyserver.linux.it: Goffredo Baroncelli (ghigo) <kreij...@inwind.it> Key fingerprint = 4769 7E51 5293 D36C 814E C054 BF04 F161 3DC5 0512 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html