From patchwork Wed Nov 3 09:23:34 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Reifschneider X-Patchwork-Id: 298632 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id oA39XB6r018396 for ; Wed, 3 Nov 2010 09:33:11 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754111Ab0KCJdI (ORCPT ); Wed, 3 Nov 2010 05:33:08 -0400 Received: from support.tummy.com ([66.35.62.44]:34213 "EHLO support.tummy.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754030Ab0KCJdH (ORCPT ); Wed, 3 Nov 2010 05:33:07 -0400 X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Wed, 03 Nov 2010 09:33:11 +0000 (UTC) X-Greylist: delayed 565 seconds by postgrey-1.27 at vger.kernel.org; Wed, 03 Nov 2010 05:33:07 EDT Received: from guin.tummy.com (vpn.tummy.com [66.35.36.132]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by support.tummy.com (SupportMail) with ESMTPSA id 536105FB05 for ; Wed, 3 Nov 2010 03:23:40 -0600 (MDT) Message-ID: <4CD12A16.4070802@support.tummy.com> Date: Wed, 03 Nov 2010 03:23:34 -0600 From: Sean Reifschneider User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.12) Gecko/20101027 Fedora/3.1.6-1.fc14 Lightning/1.0b3pre Thunderbird/3.1.6 MIME-Version: 1.0 To: linux-btrfs@vger.kernel.org Subject: Patch to provide "btrfs subvolume last-gen". X-Enigmail-Version: 1.1.2 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org diff --git a/btrfs-list.c b/btrfs-list.c index 93766a8..7e4a282 100644 --- a/btrfs-list.c +++ b/btrfs-list.c @@ -310,7 +310,7 @@ static int lookup_ino_path(int fd, struct root_info *ri) * Then we use the tree search ioctl to scan all the root items for a * given root id and spit out the latest generation we can find */ -static u64 find_root_gen(int fd) +u64 find_root_gen(int fd) { struct btrfs_ioctl_ino_lookup_args ino_args; int ret; diff --git a/btrfs.c b/btrfs.c index 46314cf..188b451 100644 --- a/btrfs.c +++ b/btrfs.c @@ -64,6 +64,9 @@ static struct Command commands[] = { { do_find_newer, 2, "subvolume find-new", " \n" "List the recently modified files in a filesystem." }, + { do_get_latest_gen, 1, "subvolume last-gen", "\n" + "Return the latest generation of a filesystem." + }, { do_defrag, -1, "filesystem defragment", "[-vcf] [-s start] [-l len] [-t size] | [|...]\n" "Defragment a file or a directory." diff --git a/btrfs_cmds.c b/btrfs_cmds.c index 8031c58..25eafb8 100644 --- a/btrfs_cmds.c +++ b/btrfs_cmds.c @@ -247,6 +247,35 @@ int do_defrag(int ac, char **av) return errors + 20; } +int do_get_latest_gen(int argc, char **argv) +{ + int fd; + int ret; + char *subvol; + u64 max_found = 0; + + subvol = argv[1]; + + ret = test_issubvolume(subvol); + if (ret < 0) { + fprintf(stderr, "ERROR: error accessing '%s'\n", subvol); + return 12; + } + if (!ret) { + fprintf(stderr, "ERROR: '%s' is not a subvolume\n", subvol); + return 13; + } + + fd = open_file_or_dir(subvol); + if (fd < 0) { + fprintf(stderr, "ERROR: can't access '%s'\n", subvol); + return 12; + } + max_found = find_root_gen(fd); + printf("transid marker was %llu\n", (unsigned long long)max_found); + return 0; +} + int do_find_newer(int argc, char **argv) { int fd; diff --git a/btrfs_cmds.h b/btrfs_cmds.h index 7bde191..ea4e18e 100644 --- a/btrfs_cmds.h +++ b/btrfs_cmds.h @@ -20,6 +20,7 @@ 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_defrag(int argc, char **argv); +int do_get_latest_gen(int argc, char **argv); int do_show_filesystem(int nargs, char **argv); int do_add_volume(int nargs, char **args); int do_balance(int nargs, char **argv); @@ -32,3 +33,4 @@ int list_subvols(int fd); int do_df_filesystem(int nargs, char **argv); int find_updated_files(int fd, u64 root_id, u64 oldest_gen); int do_find_newer(int argc, char **argv); +u64 find_root_gen(int fd);