diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-03-03 00:39:26 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-03-03 00:39:26 -0500 |
commit | 1ee7dc7a55273d34358a0ee525a9e823c999ffe6 (patch) | |
tree | a4fa4357fe99c483b08458a1fcc0de304cb1eb25 /libbcachefs/io.c | |
parent | d010a21653d34d80044c5a1d7702802b264a2a6c (diff) |
Update bcachefs sources to 2272c5f5b7 bcachefs: Mark stripe buckets with correct data type
Diffstat (limited to 'libbcachefs/io.c')
-rw-r--r-- | libbcachefs/io.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/libbcachefs/io.c b/libbcachefs/io.c index 15ce0657..7ec36113 100644 --- a/libbcachefs/io.c +++ b/libbcachefs/io.c @@ -850,6 +850,18 @@ static void bch2_write_index(struct closure *cl) queue_work(wq, &wp->index_update_work); } +static inline void bch2_write_queue(struct bch_write_op *op, struct write_point *wp) +{ + op->btree_update_ready = false; + op->wp = wp; + + spin_lock(&wp->writes_lock); + list_add_tail(&op->wp_list, &wp->writes); + if (wp->state == WRITE_POINT_stopped) + __wp_update_state(wp, WRITE_POINT_waiting_io); + spin_unlock(&wp->writes_lock); +} + void bch2_write_point_do_index_updates(struct work_struct *work) { struct write_point *wp = @@ -1708,15 +1720,6 @@ again: bch2_alloc_sectors_done_inlined(c, wp); err: if (ret <= 0) { - if (!(op->flags & BCH_WRITE_SYNC)) { - spin_lock(&wp->writes_lock); - op->wp = wp; - list_add_tail(&op->wp_list, &wp->writes); - if (wp->state == WRITE_POINT_stopped) - __wp_update_state(wp, WRITE_POINT_waiting_io); - spin_unlock(&wp->writes_lock); - } - op->flags |= BCH_WRITE_DONE; if (ret < 0) { @@ -1755,6 +1758,7 @@ err: goto again; bch2_write_done(&op->cl); } else { + bch2_write_queue(op, wp); continue_at(&op->cl, bch2_write_index, NULL); } out_nofs_restore: |