Commit Graph

1256 Commits

Author SHA1 Message Date
Kent Overstreet
76161e0687 cmd_attr: check for errors from fdopendir()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-15 14:34:54 -05:00
Kent Overstreet
039fd4064a cmd_mount: Use noxcl for opening block devices
We're only reading the superblocks, no need for O_EXCL - and this fixes
mounts failing because we're still holding the devices open.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-15 12:53:52 -05:00
Faidon Liambotis
5ed0dcc001 rust: remove dependency on itertools
The only use for itertools is in parse_mount_options() where we take a
vector, convert it to iterator and then join it. Instead, we can join
the vector directly.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-12 22:53:22 -05:00
Thomas Bertschinger
aefc264401 fix invalid write in pop_cmd()
The memmove() in pop_cmd() reads and writes beyond the end of argv.

This is basically harmless in the current C program; the environment
variable list immediately follows argv so all this does is unnecessarily
copy the beginning of that list.

However, this will become problematic once we start calling C functions
like fs_cmds() from Rust code. Then argv will be a Vec<String> (as
*mut *mut i8) and the memory layout will be different--in particular,
I don't think we can assume that a Vec<String> will be NULL-terminated
like argv always is--, meaning the invalid write could lead to heap
corruption.

Also, it doesn't look like full_cmd ever gets used after calling
pop_cmd() so I'm removing it here since it looks unneeded to me.

Signed-off-by: Thomas Bertschinger <tahbertschinger@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-12 15:04:13 -05:00
Kent Overstreet
076216c16b cmd_migrate: Fix fsck invocation
It's now an error to ask for a read_write filesystem with nochanges.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-12 15:04:09 -05:00
Steinar H. Gunderson
b6afe1bed4 init_layout(): fix rounding
block_size is in bytes, not sectors, so when calling round_up(),
we could start rounding up by a way too large size and then overflow
outside the area that migrate allocated for us.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-12 13:09:51 -05:00
koverstreet
2b7fda5aee
Merge pull request #206 from kode54/fix-fsck-service
fix fsck service location
2024-01-12 12:25:48 -05:00
Christopher Snowhill
01b4965104 fix fsck service location
Correctly generate libexecdir based path for the bcachefsck_all
service, like the bcachefsck_all_fail service already does.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
2024-01-11 23:55:39 -08:00
Kent Overstreet
f6bdf31843 kill bd_buffered_fd
this gets us back down to a single fd for opening block devices, which
means we can use O_EXCL.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-10 22:27:22 -05:00
Kent Overstreet
226bade565 kill bd_sync_fd
not needed with pwritev2(.., RWF_SYNC), and perhaps we can get down to
one fd and then use O_EXCL for block devices.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-10 22:27:22 -05:00
Kent Overstreet
2007d9b6ce Fix bch2_super_write() alignment
We're about to switch to O_DIRECT only, which means we need to write
with proper alignment.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-10 22:27:22 -05:00
Thomas Bertschinger
9a9af6e9e6 create common entry point for Rust commands
The bcachefs sub-commands that are implemented in Rust (completions,
list, and mount) had separate entrypoints and thus had some differences
in behavior.

This introduces a common entry point for the Rust sub-commands. This
reduces duplicate boilerplate code like parsing argv and setting up
logging, and will facilitate converting more sub-commands to Rust in
the future.

An immediate benefit is that this fixes an issue with `bcachefs list`
not reporting errors:

before:

$ bcachefs list /dev/typo
$ echo $?
0

after:

$ bcachefs list /dev/typo
ERROR - bcachefs_rust::cmd_list: Fatal error: "No such file or directory"
$ echo $?
1

Signed-off-by: Thomas Bertschinger <tahbertschinger@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-07 21:38:31 -05:00
Kent Overstreet
b90031efaa Update bcachefs sources to cbb2e45634dd bcachefs: fix simulateously upgrading & downgrading
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-05 20:00:08 -05:00
Kent Overstreet
ba4c17c12b atomic64_read_acquire() should be inline
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-05 15:11:51 -05:00
Kent Overstreet
e7049c592a cmd_show_super: --field-only 2024-01-05 13:01:34 -05:00
Kent Overstreet
799439a88a Update bcachefs sources to d267e10a43b2 bcachefs: __bch2_sb_field_to_text()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-05 13:01:34 -05:00
Kent Overstreet
605e2311d9 linux header updates
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-05 13:01:34 -05:00
Kent Overstreet
30c4b24b77 fix show_super default fields
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-05 12:07:57 -05:00
Kent Overstreet
a751fe3a3c cmd_reset_counters
Add a subcommand for resetting superblock counters - for automated tests

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-04 19:56:14 -05:00
Kent Overstreet
e51f25af3c fix list_journal for nochanges
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-03 23:14:56 -05:00
Kent Overstreet
1f79cf3825 Update bcachefs sources to 2a6125decb43 bcachefs: bch_sb_field_downgrade
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2024-01-03 20:31:37 -05:00
Kent Overstreet
3054e5debb improve do_splice() 2024-01-03 20:30:44 -05:00
Kent Overstreet
378ae738d5 Update bcachefs sources to 5264e9f4d0c0 bcachefs: fix setting version_upgrade_complete 2023-12-30 16:04:21 -05:00
Kent Overstreet
44bf7868e5 fix missing atomic64_read_acquire on 32 bit
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-29 20:16:47 -05:00
Kent Overstreet
9a1e627a5d fix cmd_list for new nochanges semantics
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-27 21:50:46 -05:00
koverstreet
3070f45d96
Merge pull request #196 from Conan-Kudo/spec-libexecdir
packaging: Update RPM spec to use %_libexecdir for libexec files
2023-12-24 09:11:48 -05:00
Neal Gompa
a0398cf66f packaging: Update RPM spec to use %_libexecdir for libexec files 2023-12-24 09:09:56 -05:00
Kent Overstreet
d101ad4a61 Update bcachefs sources to 44ac32df8e0c bcachefs: Split brain detection 2023-12-24 08:48:31 -05:00
koverstreet
d01f3f590c
Merge pull request #195 from Conan-Kudo/use-libexec
Makefile, fsck: Use libexec instead of lib
2023-12-24 08:47:55 -05:00
Neal Gompa
89abdd8727 Makefile, fsck: Use libexec instead of lib
These are executables that need to be installed in a non-path location.
Most distributions now install these into /usr/libexec, and the
path variable for this is LIBEXECDIR, so use that instead.
2023-12-24 08:34:16 -05:00
Kent Overstreet
8e56da27fd fixup for old gcc
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-23 19:47:08 -05:00
Kent Overstreet
bc1680d488 v1.4.0: Split brain detection
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-23 19:39:01 -05:00
Kent Overstreet
4524069e52 cmd_fsck: -k, run fsck in kernel
This adds a new option to cmd_fsck for using the kernel implementation
of fsck instead of userspace, via the BCH_IOCTL_FSCK_OFFLINE ioctl.

This isn't intended for normal usage - mainly for testing and debugging
purposes, and for when the kernel version of bcachefs better matches the
on disk format version.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-23 19:39:01 -05:00
Kent Overstreet
f0334bbc10 Update bcachefs sources to 72740a707b64 bcachefs: Split brain detection
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-23 17:10:03 -05:00
Kent Overstreet
ca4892af17 cmd_fsck can now take colon separated devices
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-22 23:30:55 -05:00
Kent Overstreet
5134a64ceb Update bcachefs sources to c6d45169c6 bcachefs: Convert split_devs() to darray 2023-12-22 21:21:14 -05:00
koverstreet
e962ffb769
Merge pull request #194 from intelfx/work/makefile-nonrecursive
Makefile: do not recursively expand flags (speed up parallel builds considerably)
2023-12-22 04:49:58 -05:00
Ivan Shapovalov
ae818d9579 Makefile: avoid recursively expanding expensive variables
Specifically, do not recursively expand $(CFLAGS) because this leads to
repeatedly performing compile tests (e. g. cc-disable-warning) on every
recipe execution.

Without (nproc=32):
```
$ time env -i PATH=/usr/bin BCACHEFS_FUSE=1 NO_RUST=1 make -j$(nproc)
<...>
    [LD]     bcachefs
  72,48s user 11,29s system 190% cpu 44,036 total
```

With:
```
$ time env -i PATH=/usr/bin BCACHEFS_FUSE=1 NO_RUST=1 make -j$(nproc)
<...>
    [LD]     bcachefs
  66,79s user 5,17s system 1955% cpu 3,679 total
```
2023-12-22 11:41:54 +03:00
Kent Overstreet
eaca023d53 Silence a few rust build warnings
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-21 19:49:55 -05:00
Kent Overstreet
596ec1050d Update bcachefs sources to df6415fefb27 bcachefs: Fixes for rust bindgen 2023-12-21 19:49:00 -05:00
Kent Overstreet
93241a1c9a Update bcachefs sources to 5d0a6c2b32f1 bcachefs: check_directory_structure() can now be run online 2023-12-21 19:10:40 -05:00
Thomas Bertschinger
2b97686ffa remove Rust artifacts during make clean
This should use `cargo clean` instead of `rm -rf ...`. Also,
due to a typo, the `rm` did not actually remove the Rust artifacts.

Signed-off-by: Thomas Bertschinger <tahbertschinger@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-20 18:45:43 -05:00
Kent Overstreet
0bacefdf5f cmd_list_journal: fix check to print entry header
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-19 21:28:43 -05:00
Kent Overstreet
4158833a51 cmd_migrate: don't link data above i_size
The new filesystem might have a smaller blocksize than the old
blocksize, which trips this.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-19 20:35:24 -05:00
Thomas Bertschinger
f06fd08067 docs: add llvm-config dependency for arch, fedora
This adds on to 446ec6b092 ("docs: mention that libclang is
required"). That commit updated the dependency list for Debian. This
adds the packages needed to get llvm-config for arch and fedora.

Signed-off-by: Thomas Bertschinger <tahbertschinger@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-19 19:52:37 -05:00
Kent Overstreet
411eb2575e cmd_migrate: fix memory leaks
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-19 19:43:30 -05:00
Kent Overstreet
2b28e8f7d2 make allocator helpers inlines
this gets us better log messages when using -fsanitize=address

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-19 19:30:15 -05:00
Kent Overstreet
5fa4e3da62 cmd_migrate: check for write errors
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-19 19:30:00 -05:00
Kent Overstreet
fe37b584d3 fix shrinker_free()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-19 19:29:25 -05:00
Kent Overstreet
3233d8a0c4 cmd_migrate: fix write_data()
passing a parent closure is totally unnecessary when using
BCH_WRITE_SYNC - and pops an assert in debug mode, because the write
path no longer supports delivering completions that way.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
2023-12-19 19:17:21 -05:00