Development of userspace BTRFS tools
Find a file
Miao Xie 162df1e30c Btrfs-progs: restructure list_subvolumes
The current code of list_subvols() has very bad scalability, if we want to
add new filter conditions or new sort methods, we have to modify lots of code.

Beside that, the most code of list_snapshots() is similar to list_subvols(),

So I restructure list_subvols(), and split the subvolume filter function,
the subvolume sort function and the output function from list_subvols().
In order to implement it, we defined some importtant structures:
struct btrfs_list_filter {
	btrfs_list_filter_func filter_func;
	void *data;
};

struct btrfs_list_comparer {
	btrfs_list_comp_func comp_func;
	int is_descending;
};

struct {
	char	*name;
	char	*column_name;
	int	need_print;
} btrfs_list_columns[];

If we want to add a new filter condition, we can choose a suitable filter
function, or implement a new filter function[1], and add it into a set of
the filters, and then pass the filter set into list_subvols(). We also can
mix several filters (just add those filters into the set, and pass the set
into list_subvols()) if the users specify two or more filter conditions.

The subvolume sort function is similar to the subvolume filter function. The
differentiation is the order of comparers in the array which is passed into
list_subvols() show us the priority of the sort methods.

The output function is different with the above two functions, we define a
array to manage all the columns that can be outputed, and use a member variant
(->need_print) to control the output of the relative column. Some columns are
outputed by default. But we can change it according to the requirement of the
users.

After appling this patch, we needn't implement a independent list_snapshots()
function, just pass a filter function which is used to identify the snapshot
into list_subvols().

[1]: If we implement new filter functions or compare functions, we must add
them into the array all_filter_funcs or the array all_comp_funcs, and modify
the relative enum variants(btrfs_list_filter_enum, btrfs_list_comp_enum).

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
2012-10-04 16:26:32 -04:00
man btrfs-progs: mkfs: rename nodiscard option to K 2012-10-02 13:02:36 +02:00
.gitignore btrfs-progs: add a recovery utility to pull files from damanged filesystems 2011-10-27 12:49:54 -04:00
.hgignore Add .hgignore file to ignore verison.h 2008-07-23 11:36:13 -04:00
.hgtags Added tag v0.16 for changeset 2b26e4f8c71e 2008-08-04 15:46:36 -04:00
bcp Btrfs-progs: Correct path munging in bcp 2011-10-25 09:18:58 -04:00
bit-radix.c Make btrfs-progs compile with -fstrict-aliasing (included in -O2) again. 2007-09-14 10:31:06 -04:00
bit-radix.h add GPLv2 2007-06-12 09:07:11 -04:00
btrfs-corrupt-block.c Btrfs-progs, btrfs-corrupt-block: fix the wrong usage 2012-07-03 16:27:46 -04:00
btrfs-defrag.c new util: 'btrfs' 2010-03-11 13:45:47 -05:00
btrfs-image.c Mixed back reference (FORWARD ROLLING FORMAT CHANGE) 2009-06-08 13:30:36 -04:00
btrfs-list.c Btrfs-progs: restructure list_subvolumes 2012-10-04 16:26:32 -04:00
btrfs-list.h Btrfs-progs: restructure list_subvolumes 2012-10-04 16:26:32 -04:00
btrfs-map-logical.c Btrfs-progs, btrfs-map-logical: Fix typo in usage 2012-07-03 16:27:46 -04:00
btrfs-select-super.c btrfsck: decode error properly 2011-10-25 09:18:59 -04:00
btrfs-show.c Deprecate btrfsctl, btrfs-show, btrfs-vol 2011-10-25 09:18:31 -04:00
btrfs-vol.c Btrfs-progs: only enforce a maximum size if we specify one 2012-10-02 13:02:48 +02:00
btrfs-zero-log.c btrfs-progs: make sure btrfs-zero-log writes something 2011-11-21 10:27:17 -05:00
btrfs.c Btrfs-progs: fix several complie warning 2012-10-04 16:26:31 -04:00
btrfsck.c Btrfs-progs: fix wrong return value of check_owner_ref() 2012-10-04 16:26:31 -04:00
btrfsctl.c avoid several strncpy-induced buffer overruns 2012-06-05 19:56:20 +01:00
btrfslabel.c Btrfs-progs: seg fault in get_label_unmounted 2012-10-04 16:26:32 -04:00
btrfslabel.h Add the "btrfs filesystem label" command 2011-10-25 09:18:31 -04:00
btrfstune.c update btrfs-progs for seed device support 2008-11-18 10:40:06 -05:00
calc-size.c btrfs-progs: add a recovery utility to pull files from damanged filesystems 2011-10-27 12:49:54 -04:00
cmds-balance.c Btrfs-progs: allow multi-line command group synopsis 2012-02-08 18:55:51 +02:00
cmds-device.c Btrfs-progs: only enforce a maximum size if we specify one 2012-10-02 13:02:48 +02:00
cmds-filesystem.c btrfs-progs: Update resize documentation 2012-07-03 16:27:46 -04:00
cmds-inspect.c Btrfs-progs: restructure list_subvolumes 2012-10-04 16:26:32 -04:00
cmds-qgroup.c Btrfs-progs: fix arguments check of qgroup limit 2012-10-02 13:02:51 +02:00
cmds-quota.c Btrfs progs: quota groups support 2012-09-04 11:15:49 +02:00
cmds-receive.c Btrfs-progs: add btrfs send/receive commands 2012-07-26 14:51:27 -04:00
cmds-scrub.c scrub_fs_info( ) file handle leaking 2012-07-03 16:27:46 -04:00
cmds-send.c Btrfs-progs: fix several complie warning 2012-10-04 16:26:31 -04:00
cmds-subvolume.c Btrfs-progs: restructure list_subvolumes 2012-10-04 16:26:32 -04:00
commands.h Btrfs progs: quota groups support 2012-09-04 11:15:49 +02:00
common.c Btrfs-progs: rearrange files in the repo 2012-02-03 21:00:17 +02:00
convert.c Fix btrfs-convert, btrfs-restore and btrfs-find-root build 2012-02-08 23:11:49 -05:00
COPYING fix COPYING 2007-06-12 15:41:08 -04:00
crc32c.c Btrfs-progs: fix several complie warning 2012-10-04 16:26:31 -04:00
crc32c.h Btrfs-progs: fix several complie warning 2012-10-04 16:26:31 -04:00
ctree.c btrfsck: add early code to handle corrupted block groups 2012-02-22 10:59:55 -05:00
ctree.h Btrfs-progs: fix wrong way to check if the root item contains otime and uuid 2012-10-04 16:26:32 -04:00
debug-tree.c Btrfs progs: quota groups support 2012-09-04 11:15:49 +02:00
dir-item.c Fix unused-but-set errors in gcc-4.6 2011-10-25 09:18:32 -04:00
dir-test.c Btrfs: add btrfs-debug-tree -b <block number> to print a single block 2010-04-06 09:30:17 -04:00
disk-io.c btrfsck: add --init-csum-tree to replace the csum root with an empty one 2012-02-09 10:38:05 -05:00
disk-io.h Add open_ctree_fs_info for partial FS opens 2012-02-05 16:11:48 -05:00
extent-cache.c Fix unused-but-set errors in gcc-4.6 2011-10-25 09:18:32 -04:00
extent-cache.h Add semantic checks to btrfsck for files and directories 2009-01-07 14:57:12 -05:00
extent-tree.c btrfsck: add early code to handle corrupted block groups 2012-02-22 10:59:55 -05:00
extent_io.c Allow extent_buffers to use more ram 2012-02-06 05:08:06 -05:00
extent_io.h Verify parent generation number on btree reads 2008-05-13 13:48:58 -04:00
file-item.c btrfs-progs: Improvement for making btrfs image from source directory. 2011-10-25 09:19:00 -04:00
find-root.c btrfs-progs: add a recovery utility to pull files from damanged filesystems 2011-10-27 12:49:54 -04:00
hash.h Switch btrfs_name_hash() to crc32c 2008-08-20 20:11:23 -04:00
hasher.c Unaligned access fixes 2008-02-15 11:19:58 -05:00
help.c Btrfs-progs: allow multi-line command group synopsis 2012-02-08 18:55:51 +02:00
inode-item.c btrfs-progs new dir index support 2008-07-24 12:13:32 -04:00
inode-map.c btrfs-progs: Fix printf format casting errors 2008-04-01 10:52:22 -04:00
INSTALL btrfs-progs-unstable: replace debug-tree to btrfs-debug-tree in INSTALL 2011-10-25 09:18:59 -04:00
ioctl-test.c Test the additional ioctl. 2011-10-25 09:18:58 -04:00
ioctl.h Btrfs progs: quota groups support 2012-09-04 11:15:49 +02:00
kerncompat.h multidevice support for check_mounted 2010-09-23 20:26:49 -04:00
list.h Dynamic chunk allocation 2008-03-24 15:03:58 -04:00
Makefile Btrfs progs: quota groups support 2012-09-04 11:15:49 +02:00
mkfs.c Btrfs-progs: only enforce a maximum size if we specify one 2012-10-02 13:02:48 +02:00
print-tree.c Btrfs progs: quota groups support 2012-09-04 11:15:49 +02:00
print-tree.h Btrfs: add btrfs-debug-tree -b <block number> to print a single block 2010-04-06 09:30:17 -04:00
qgroup.c Btrfs progs: quota groups support 2012-09-04 11:15:49 +02:00
qgroup.h Btrfs progs: quota groups support 2012-09-04 11:15:49 +02:00
quick-test.c Btrfs: add btrfs-debug-tree -b <block number> to print a single block 2010-04-06 09:30:17 -04:00
radix-tree.c Make btrfs-progs compile with -fstrict-aliasing (included in -O2) again. 2007-09-14 10:31:06 -04:00
radix-tree.h i386 fixes from axboe 2007-06-12 11:39:09 -04:00
random-test.c Btrfs: add btrfs-debug-tree -b <block number> to print a single block 2010-04-06 09:30:17 -04:00
rbtree.c Stop using radix trees to record pending allocations 2007-10-15 16:25:04 -04:00
rbtree.h Stop using radix trees to record pending allocations 2007-10-15 16:25:04 -04:00
repair.c Btrfsck: add the ability to prune corrupt extent allocation tree blocks 2012-02-21 14:37:21 -05:00
repair.h Btrfsck: add the ability to prune corrupt extent allocation tree blocks 2012-02-21 14:37:21 -05:00
restore.c Btrfs-progs: fix several complie warning 2012-10-04 16:26:31 -04:00
root-tree.c Btrfs: update converter for the new disk format 2008-12-17 16:10:07 -05:00
send-stream.c Btrfs-progs: add btrfs send/receive commands 2012-07-26 14:51:27 -04:00
send-stream.h Btrfs-progs: add btrfs send/receive commands 2012-07-26 14:51:27 -04:00
send-utils.c Btrfs-progs: restructure list_subvolumes 2012-10-04 16:26:32 -04:00
send-utils.h Btrfs-progs: add btrfs send/receive commands 2012-07-26 14:51:27 -04:00
send.h Btrfs-progs: add btrfs send/receive commands 2012-07-26 14:51:27 -04:00
show-blocks Fix showblocks to display different colors for different metadata roots 2009-03-09 13:00:44 -04:00
transaction.h Update btrfs-progs to match kernel sources 2008-01-04 10:38:22 -05:00
utils.c Btrfs-progs: only enforce a maximum size if we specify one 2012-10-02 13:02:48 +02:00
utils.h Btrfs-progs: only enforce a maximum size if we specify one 2012-10-02 13:02:48 +02:00
version.sh btrfs-progs v0.19 2009-06-11 12:56:15 -04:00
volumes.c btrfsck: add early code to handle corrupted block groups 2012-02-22 10:59:55 -05:00
volumes.h btrfsck: add early code to handle corrupted block groups 2012-02-22 10:59:55 -05:00