mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-11 12:44:49 -04:00
bcachefs: alloc_request.data_type
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
@@ -716,7 +716,6 @@ static int add_new_bucket(struct bch_fs *c,
|
||||
int bch2_bucket_alloc_set_trans(struct btree_trans *trans,
|
||||
struct alloc_request *req,
|
||||
struct dev_stripe_state *stripe,
|
||||
enum bch_data_type data_type,
|
||||
struct closure *cl)
|
||||
{
|
||||
struct bch_fs *c = trans->c;
|
||||
@@ -737,7 +736,7 @@ int bch2_bucket_alloc_set_trans(struct btree_trans *trans,
|
||||
|
||||
struct bch_dev_usage usage;
|
||||
struct open_bucket *ob = bch2_bucket_alloc_trans(trans, ca,
|
||||
req->watermark, data_type,
|
||||
req->watermark, req->data_type,
|
||||
cl, req->flags & BCH_WRITE_alloc_nowait,
|
||||
&usage);
|
||||
if (!IS_ERR(ob))
|
||||
@@ -933,8 +932,7 @@ static int __open_bucket_add_buckets(struct btree_trans *trans,
|
||||
* Try nonblocking first, so that if one device is full we'll try from
|
||||
* other devices:
|
||||
*/
|
||||
ret = bch2_bucket_alloc_set_trans(trans, req, &req->wp->stripe,
|
||||
req->wp->data_type, cl);
|
||||
ret = bch2_bucket_alloc_set_trans(trans, req, &req->wp->stripe, cl);
|
||||
if (ret &&
|
||||
!bch2_err_matches(ret, BCH_ERR_transaction_restart) &&
|
||||
!bch2_err_matches(ret, BCH_ERR_insufficient_devices) &&
|
||||
@@ -1285,12 +1283,14 @@ int bch2_alloc_sectors_start_trans(struct btree_trans *trans,
|
||||
|
||||
*wp_ret = req.wp = writepoint_find(trans, write_point.v);
|
||||
|
||||
req.data_type = req.wp->data_type;
|
||||
|
||||
ret = bch2_trans_relock(trans);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
/* metadata may not allocate on cache devices: */
|
||||
if (req.wp->data_type != BCH_DATA_user)
|
||||
if (req.data_type != BCH_DATA_user)
|
||||
req.have_cache = true;
|
||||
|
||||
if (target && !(flags & BCH_WRITE_only_specified_devs)) {
|
||||
|
||||
@@ -30,6 +30,7 @@ struct alloc_request {
|
||||
bool ec;
|
||||
enum bch_watermark watermark;
|
||||
enum bch_write_flags flags;
|
||||
enum bch_data_type data_type;
|
||||
struct bch_devs_list *devs_have;
|
||||
|
||||
struct write_point *wp;
|
||||
@@ -191,8 +192,7 @@ static inline bool bch2_bucket_is_open_safe(struct bch_fs *c, unsigned dev, u64
|
||||
|
||||
enum bch_write_flags;
|
||||
int bch2_bucket_alloc_set_trans(struct btree_trans *, struct alloc_request *,
|
||||
struct dev_stripe_state *, enum bch_data_type,
|
||||
struct closure *);
|
||||
struct dev_stripe_state *, struct closure *);
|
||||
|
||||
int bch2_alloc_sectors_start_trans(struct btree_trans *,
|
||||
unsigned, unsigned,
|
||||
|
||||
@@ -1755,11 +1755,9 @@ static int new_stripe_alloc_buckets(struct btree_trans *trans,
|
||||
if (nr_have_parity < s->nr_parity) {
|
||||
req.nr_replicas = s->nr_parity;
|
||||
req.nr_effective = nr_have_parity;
|
||||
req.data_type = BCH_DATA_parity;
|
||||
|
||||
ret = bch2_bucket_alloc_set_trans(trans, &req,
|
||||
&h->parity_stripe,
|
||||
BCH_DATA_parity,
|
||||
cl);
|
||||
ret = bch2_bucket_alloc_set_trans(trans, &req, &h->parity_stripe, cl);
|
||||
|
||||
open_bucket_for_each(c, &req.ptrs, ob, i) {
|
||||
j = find_next_zero_bit(s->blocks_gotten,
|
||||
@@ -1780,11 +1778,9 @@ static int new_stripe_alloc_buckets(struct btree_trans *trans,
|
||||
if (nr_have_data < s->nr_data) {
|
||||
req.nr_replicas = s->nr_data;
|
||||
req.nr_effective = nr_have_data;
|
||||
req.data_type = BCH_DATA_user;
|
||||
|
||||
ret = bch2_bucket_alloc_set_trans(trans, &req,
|
||||
&h->block_stripe,
|
||||
BCH_DATA_user,
|
||||
cl);
|
||||
ret = bch2_bucket_alloc_set_trans(trans, &req, &h->block_stripe, cl);
|
||||
|
||||
open_bucket_for_each(c, &req.ptrs, ob, i) {
|
||||
j = find_next_zero_bit(s->blocks_gotten,
|
||||
|
||||
Reference in New Issue
Block a user