summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2007-08-07 16:15:59 -0400
committerDavid Woodhouse <dwmw2@hera.kernel.org>2007-08-07 16:15:59 -0400
commit0528b69c1507dbbde9038e7705fc15cc06e9f33b (patch)
tree370c0d5490d4b17aa603c907bf8575af0976c185
parent330f6227aa409f720157fcef35bc8642190a2fb1 (diff)
add defrag ioctl
-rw-r--r--btrfsctl.c11
-rw-r--r--ioctl.h2
-rw-r--r--mkfs.c1
-rw-r--r--print-tree.c10
4 files changed, 22 insertions, 2 deletions
diff --git a/btrfsctl.c b/btrfsctl.c
index ae2f27b3..4dfc42bd 100644
--- a/btrfsctl.c
+++ b/btrfsctl.c
@@ -77,6 +77,12 @@ int main(int ac, char **av)
exit(1);
}
command = BTRFS_IOC_SNAP_CREATE;
+ } else if (strcmp(av[i], "-d") == 0) {
+ if (i >= ac - 1) {
+ fprintf(stderr, "-d requires an arg");
+ print_usage();
+ }
+ command = BTRFS_IOC_DEFRAG;
}
}
if (command == 0) {
@@ -102,7 +108,10 @@ int main(int ac, char **av)
perror("open");
exit(1);
}
- strcpy(args.name, name);
+ if (name)
+ strcpy(args.name, name);
+ else
+ args.name[0] = '\0';
ret = ioctl(fd, command, &args);
printf("ioctl returns %d\n", ret);
return 0;
diff --git a/ioctl.h b/ioctl.h
index 23bed48c..8bc47dec 100644
--- a/ioctl.h
+++ b/ioctl.h
@@ -28,6 +28,6 @@ struct btrfs_ioctl_vol_args {
#define BTRFS_IOC_SNAP_CREATE _IOW(BTRFS_IOCTL_MAGIC, 1, \
struct btrfs_ioctl_vol_args)
-#define BTRFS_IOC_ADD_DISK _IOW(BTRFS_IOCTL_MAGIC, 2, \
+#define BTRFS_IOC_DEFRAG _IOW(BTRFS_IOCTL_MAGIC, 2, \
struct btrfs_ioctl_vol_args)
#endif
diff --git a/mkfs.c b/mkfs.c
index ac990495..bd664672 100644
--- a/mkfs.c
+++ b/mkfs.c
@@ -225,6 +225,7 @@ int mkfs(int fd, char *pathname, u64 num_blocks, u32 blocksize)
btrfs_set_inode_nblocks(inode_item, 1);
btrfs_set_inode_mode(inode_item, S_IFDIR | 0755);
+ // memset(&root_item, 0, sizeof(root_item));
btrfs_set_root_dirid(&root_item, 0);
btrfs_set_root_refs(&root_item, 1);
btrfs_set_disk_key_offset(&item.key, 0);
diff --git a/print-tree.c b/print-tree.c
index 9df4379a..60deda54 100644
--- a/print-tree.c
+++ b/print-tree.c
@@ -96,6 +96,16 @@ void btrfs_print_leaf(struct btrfs_root *root, struct btrfs_leaf *l)
(unsigned long long)btrfs_root_blocknr(ri),
(unsigned long long)btrfs_root_dirid(ri),
btrfs_root_refs(ri));
+ if (1 || btrfs_root_refs(ri) == 0) {
+ struct btrfs_key drop_key;
+ btrfs_disk_key_to_cpu(&drop_key,
+ &ri->drop_progress);
+ printf("\t\tdrop key %Lu %x %Lu level %d\n",
+ (unsigned long long)drop_key.objectid,
+ drop_key.flags,
+ (unsigned long long)drop_key.offset,
+ ri->drop_level);
+ }
break;
case BTRFS_EXTENT_ITEM_KEY:
ei = btrfs_item_ptr(l, i, struct btrfs_extent_item);