Commit Graph

32 Commits

Author SHA1 Message Date
TruongSinh Tran-Nguyen
c1a8e27a3f chore(rust): add opt_get! and expose some FMODE_* as Rust const
In an effort to rewrite `bch2_read_super` from C to Rust,
it is neccessary to have `opt_get!` macro defined, and some
FMODE_* consts (defined as macro in `include/linux/blkdev.h`)
defined as Rust const.

Bindgen is currently unable to exapnd C functional macro [1],
this this commit use the workaround as introduced in [2].

[1] https://github.com/rust-lang/rust-bindgen/issues/753
[2] https://github.com/rust-lang/rust-bindgen/issues/753#issuecomment-608546390

Signed-off-by: TruongSinh Tran-Nguyen <i@truongsinh.pro>
2023-04-27 19:23:17 -04:00
TruongSinh Tran-Nguyen
9ee211eaca feat(cmd_mount): Add support for magic keyword OLD_BLKID_UUID
This commit enhances mount sub command by allowing it to accept
`OLD_BLKID_UUID=xxx` as the device, enabling whole fs mounting without relying
on colon-separated devices.

Using colon-separated devices in fstab is discouraged due to potential device
reference issues after reboot. Additionally, using `UUID=xxx` in fstab or with
`mount -t bcachefs` is currently infeasible as it depends on blkid, which prior
to v2.39, does not recognize bcachefs. This update enables mounting via fstab
using `OLD_BLKID_UUID=xxx` as obtained from `bcachefs show-super` "External
UUID".

Signed-off-by: TruongSinh Tran-Nguyen <i@truongsinh.pro>
2023-04-26 17:46:23 -04:00
TruongSinh Tran-Nguyen
47ec3ed6ed chore: logger for idiomatic style and expanded logging levels
Improve the Rust logger by adhering to idiomatic Rust conventions and
incorporating additional logging levels: warn, debug, and trace.

Signed-off-by: TruongSinh Tran-Nguyen <i@truongsinh.pro>
2023-04-26 17:46:23 -04:00
Kent Overstreet
ea1b618203 cmd_list.rs: Finish list modes, delete cmd_list.c
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-03-06 04:13:45 -05:00
Kent Overstreet
7709585c2a rust: Implement BtreeNodeIter
This implements BtreeNodeIter, and adds it to cmd_list.rs - the next
step in having a full replacement for cmd_list.c

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-03-04 23:33:30 -05:00
Kent Overstreet
9fc4b5d675 rust: Fix ptr casting in Fs::open()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-03-04 19:14:50 -05:00
Kent Overstreet
d5b0d0892a rust: BkeySC now has correct lifetime on BtreeIter
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-03-02 22:01:00 -05:00
Kent Overstreet
8a7e3344fe rust: Filesystem options now supported
This implements opt_set!(), which works exactly the same as the C
version and allows filesystem options to be specified in Rust code.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-28 06:15:48 -05:00
Kent Overstreet
daebbc085d rust: BtreeTrans lifetime now marked w.r.t. Fs
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-28 02:28:44 -05:00
Kent Overstreet
b6f30fd188 rust: BkeyValC
Now we have a rust-style enum for key types

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-28 02:14:40 -05:00
Kent Overstreet
59528398cf rust: BkeySC
Implement a rust equivalent to bkey_s_c, which uses references with the
correct lifetimes: now cmd_list.rs doesn't need unsafe.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-28 01:01:50 -05:00
Kent Overstreet
a999dc0a9f bcachefs: Annotate BtreeIter with BtreeTrans lifetime
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-28 00:34:43 -05:00
Kent Overstreet
a8dbc331f0 rust: Simplify bpos FromStr
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-28 00:33:42 -05:00
Kent Overstreet
a3eb6ad8ef rust: BtreeIterFlags
This adds a new wrapper type for btree iterator flags.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-27 22:15:10 -05:00
Kent Overstreet
e0e06d95f8 Rust: Start of cmd_list rewrite
This is a _very_ preliminary rewrite of the cmd_list tool in rust, which
is intended to be a testing ground for a safe interface in Rust to the
core btree interface. This adds rust wrappers for:

bch_fs:		provides bch2_fs_open(), bch2_fs_stop
btree_trans:	provides bch2_trans_init(), bch2_trans_exit()
btree_iter:	provides peek, peek_and_restart, advance
bch_errcode:	implements Display (wraps bch2_err_str())
bpos:		implements Ord (wraps bpos_cmp())
bkey_s_c:	implements Display (wraps bch2_bkey_val_to_text())

and other assorted types.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-27 21:45:42 -05:00
Daniel Hill
bf359ac1ad nix fix up! Rust now integrated into bcachefs binary
Heavily simplified to just call make with the required rust dependencies.

Signed-off-by: Daniel Hill <daniel@gluo.nz>
2023-02-27 16:39:46 +13:00
Westly Ward
203e40fcf5 Made the -k option for mount.bcachefs default to ask, without messing up formatting
Signed-off-by: Westly Ward <sonicrules1234@gmail.com>
2023-02-22 13:12:59 -07:00
Kent Overstreet
c67ea7b6a1 rust-src: Clean up read_super bindings
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-21 15:58:42 -05:00
Kent Overstreet
f2ab6e552d More rust improvements
- passing of arguments from c -> rust code now works correctly
 - 'bcachefs mount' now handles being passed a device or devices

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-21 14:39:43 -05:00
Kent Overstreet
28f703cc25 Rust now integrated into bcachefs binary
Rust is now required for building the bcachefs tool, and rust code is
now fully integrated with the C codebase - meaning it is possible to
call back and forth.

The mount helper is now a subcommand, 'mount.bcachefs' is now a small
shell wrapper that invokes 'bcachefs mount'.

This will make it easier to start rewriting other subcommands in rust,
and eventually the whole command line interface.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-02-21 01:03:08 -05:00
Daniel Hill
157ea20eb2 mount: support remount
remount is handled by libc, not the kernel mount procedure, this fixes
remounts. Also sorted the list of flags.

Signed-off-by: Daniel Hill <daniel@gluo.nz>
2023-02-11 13:45:23 +13:00
Daniel Hill
abe1c3bc8e nix: fix compilation issues
Update Cargo.lock files to match new dependancies
Bump nixpkgs pin
2023-02-02 12:54:04 +13:00
Alexander Fougner
8accfdc3c5 rust: replace tracing with logger
tracing framework is a overengineered for simple mount helper. Add a
few very barebone logging macros to allow configurable verbosity and
colorized output with a small footprint.

Signed-off-by: Alexander Fougner <fougner89@gmail.com>
2023-01-18 06:47:46 +01:00
Alexander Fougner
20aecb42d8 rust: use rustfmt defaults
follow the kernel style guide, i.e idiomatic rust style.

Signed-off-by: Alexander Fougner <fougner89@gmail.com>
2023-01-16 09:24:01 +01:00
Alexander Fougner
bdc290eee0 rust: suppress errors on fs probing
suppress errors for any non-bchfs blockdevs found during probing

Signed-off-by: Alexander Fougner <fougner89@gmail.com>
2023-01-15 22:20:16 +01:00
Alexander Fougner
87243efa5c rust: support fstab style mount
- add support for fstab format, UUID=<uuid>

- structopt is no longer actively maintained, replace with clap v4
  which support everything structopt can and more.

- update dependencies

Signed-off-by: Alexander Fougner <fougner89@gmail.com>
2023-01-15 22:20:13 +01:00
Daniel Hill
9a44c6d4d0 nix: overhaul build system.
Removed outdated overlay.
Simply build tooling using bingenHook and propagated*Inputs

Signed-off-by: Daniel Hill <daniel@gluo.nz>
2023-01-03 16:58:55 +13:00
Daniel Hill
9d6040c8b6 rust: update bindgen to 0.63
Signed-off-by: Daniel Hill <daniel@gluo.nz>
2023-01-03 16:58:55 +13:00
Kent Overstreet
effa4c9432 rust-src: cargo update
Update locked dependencies

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2022-11-19 19:00:25 -05:00
Kayla Firestack
1f8fc31ddc split mount into a library crate for rust reuse
update makefile to output shared library and rust build
fix default.nix to properly get the binary name for `ln`ing - move binary to main.rs
add rustfmt and gitignore files
move build.rs file into bch_bindgen for reuse between projects
add outputs to nix flake and checks
add mount.toml to makefile
2021-10-18 16:30:52 -04:00
Kayla Firestack
7e97ef59bd add mount and bch-bindgen nix builder file
update kernel diffHash
2021-10-18 12:34:12 -04:00
Kayla Firestack
26d6b3464a move mount into rust-src, add to overlay 2021-10-18 12:21:23 -04:00