mbox series

[v2,0/9] btrfs-progs: mkfs: introduce an experimental --subvol option

Message ID cover.1697754500.git.wqu@suse.com (mailing list archive)
Headers show
Series btrfs-progs: mkfs: introduce an experimental --subvol option | expand

Message

Qu Wenruo Oct. 19, 2023, 10:29 p.m. UTC
[CHANGELOG]
v2:
- Crossport fs_types from kernel
  So that we can have infrastructure more in-line with kernel code.
  Unfortunately we still need a new fs_ftypes_to_umode() helper for
  progs.

- More cleanups for btrfs_add_link()

- Make btrfs_add_link() have the same ability of the kernel one
  This is to allow btrfs_add_link() to link a subvolume to a parent
  inode.
  Unfortunately the parameter list is still quite different due to the
  lack of btrfs_inode and dentry.

- Merge btrfs_mksubvol() into btrfs_add_link()
  Since btrfs_add_link() can now handle linking of a subvolume, we
  can remove the progs specific code.

- New common/inode.[ch] for btrfs_create_subvol() and
  btrfs_make_root_dir()
  Those two functions are progs specific and would be utilized by code
  out of check/convert. Thus moving them to common/ would be better


Issue #42 (good number by the way) is suggesting a very useful feature
for rootfs image creation.

Currently we only support "mkfs.btrfs --rootdir" to fill the fs tree
with target directory, but there has no btrfs specific features
involved.

If we can create certain paths as subvolumes, not pure directories, it
can be very useful to create the whole btrfs image just by "mkfs.btrfs"

This series is the first step torwards this idea.

Now we have a new experimental option "--subvol" for mkfs.btrfs, but
with the following limits:

- No co-operation with --rootdir
  This requires --rootdir to have extra handling for any existing
  inodes.
  (Currently --rootdir assumes the fs tree is completely empty)

- No multiple --subvol options supports
  This requires us to collect and sort all the paths and start creating
  subvolumes from the shortest path.
  Furthermore this requires us to create subvolume under another
  subvolume.

Each limit would need a new series of patches to address, but this
series would already provide a working but not-that-useful
implementation of "--subvol" option, along with a basic test case for
it.

Qu Wenruo (9):
  btrfs-progs: cross-port fs_types from kernel
  btrfs-progs: remove add_backref parameter from btrfs_add_link()
  btrfs-progs: remove filetype parameter of btrfs_add_link()
  btrfs-progs: merge btrfs_mksubvol() into btrfs_add_link()
  btrfs-progs: enhance btrfs_mkdir() function
  btrfs-progs: enhance btrfs_create_root() function
  btrfs-progs: use a unified btrfs_make_subvol() implementation
  btrfs-progs: mkfs: introduce experimental --subvol option
  btrfs-progs: mkfs-tests: introduce a test case to verify --subvol
    option

 Makefile                                   |   2 +
 check/main.c                               |  17 +-
 check/mode-common.c                        |  12 +-
 check/mode-common.h                        |  32 --
 check/mode-lowmem.c                        |  40 ++-
 common/inode.c                             |  90 ++++++
 common/inode.h                             |  16 +
 convert/main.c                             | 139 ++++++---
 include/kerncompat.h                       |   1 +
 kernel-shared/ctree.c                      | 106 +++----
 kernel-shared/ctree.h                      |  17 +-
 kernel-shared/fs_types.c                   |  62 ++++
 kernel-shared/fs_types.h                   |  87 ++++++
 kernel-shared/inode.c                      | 347 ++++++++++-----------
 mkfs/common.c                              |  39 ---
 mkfs/common.h                              |   2 -
 mkfs/main.c                                | 106 ++-----
 mkfs/rootdir.c                             | 157 ++++++++++
 mkfs/rootdir.h                             |   1 +
 tests/mkfs-tests/031-subvol-option/test.sh |  39 +++
 tune/convert-bgt.c                         |   3 +-
 tune/quota.c                               |   2 +-
 22 files changed, 829 insertions(+), 488 deletions(-)
 create mode 100644 common/inode.c
 create mode 100644 common/inode.h
 create mode 100644 kernel-shared/fs_types.c
 create mode 100644 kernel-shared/fs_types.h
 create mode 100755 tests/mkfs-tests/031-subvol-option/test.sh

--
2.42.0