mirror of https://github.com/torvalds/linux.git
bcachefs: Device state is now a runtime option
Other options can normally be set at runtime via sysfs, no reason for this one not to be as well - it just doesn't support the degraded flags argument this way, that requires the ioctl. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
7b84d934a1
commit
8d7b7ac367
|
|
@ -482,9 +482,16 @@ void bch2_opts_to_text(struct printbuf *out,
|
|||
|
||||
int bch2_opt_check_may_set(struct bch_fs *c, struct bch_dev *ca, int id, u64 v)
|
||||
{
|
||||
lockdep_assert_held(&c->state_lock);
|
||||
|
||||
int ret = 0;
|
||||
|
||||
switch (id) {
|
||||
case Opt_state:
|
||||
if (ca)
|
||||
return __bch2_dev_set_state(c, ca, v, BCH_FORCE_IF_DEGRADED);
|
||||
break;
|
||||
|
||||
case Opt_compression:
|
||||
case Opt_background_compression:
|
||||
ret = bch2_check_set_has_compressed_data(c, v);
|
||||
|
|
|
|||
|
|
@ -495,7 +495,7 @@ enum fsck_err_opts {
|
|||
NULL, "Skip submit_bio() for data reads and writes, " \
|
||||
"for performance testing purposes") \
|
||||
x(state, u64, \
|
||||
OPT_DEVICE, \
|
||||
OPT_DEVICE|OPT_RUNTIME, \
|
||||
OPT_STR(bch2_member_states), \
|
||||
BCH_MEMBER_STATE, BCH_MEMBER_STATE_rw, \
|
||||
"state", "rw,ro,failed,spare") \
|
||||
|
|
|
|||
|
|
@ -631,6 +631,8 @@ static ssize_t sysfs_opt_store(struct bch_fs *c,
|
|||
if (unlikely(!bch2_write_ref_tryget(c, BCH_WRITE_REF_sysfs)))
|
||||
return -EROFS;
|
||||
|
||||
down_write(&c->state_lock);
|
||||
|
||||
char *tmp = kstrdup(buf, GFP_KERNEL);
|
||||
if (!tmp) {
|
||||
ret = -ENOMEM;
|
||||
|
|
@ -664,6 +666,7 @@ static ssize_t sysfs_opt_store(struct bch_fs *c,
|
|||
|
||||
ret = size;
|
||||
err:
|
||||
up_write(&c->state_lock);
|
||||
bch2_write_ref_put(c, BCH_WRITE_REF_sysfs);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue