X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libbcachefs%2Fio_types.h;h=4e5d31060b5760a5bc4b8dbc511bcd54d6070030;hb=9fc4b5d675cd6dc0b2503abe95b1c761d8d05abe;hp=c2c2cce016ed7acb94d7377acd83bfd9f249f846;hpb=7f3557f57efb6e22aa90fdaca481907f633ceb08;p=bcachefs-tools-debian diff --git a/libbcachefs/io_types.h b/libbcachefs/io_types.h index c2c2cce..4e5d310 100644 --- a/libbcachefs/io_types.h +++ b/libbcachefs/io_types.h @@ -58,8 +58,19 @@ struct bch_read_bio { struct bch_devs_list devs_have; struct extent_ptr_decoded pick; - /* start pos of data we read (may not be pos of data we want) */ - struct bpos pos; + + /* + * pos we read from - different from data_pos for indirect extents: + */ + u32 subvol; + struct bpos read_pos; + + /* + * start pos of data we read (may not be pos of data we want) - for + * promote, narrow extents paths: + */ + enum btree_id data_btree; + struct bpos data_pos; struct bversion version; struct promote_op *promote; @@ -76,16 +87,18 @@ struct bch_write_bio { struct bch_write_bio *parent; u64 submit_time; + u64 inode_offset; struct bch_devs_list failed; - u8 order; u8 dev; unsigned split:1, bounce:1, put_bio:1, have_ioref:1, - used_mempool:1; + nocow:1, + used_mempool:1, + first_btree_write:1; struct bio bio; }; @@ -93,7 +106,7 @@ struct bch_write_bio { struct bch_write_op { struct closure cl; struct bch_fs *c; - struct workqueue_struct *io_wq; + void (*end_io)(struct bch_write_op *); u64 start_time; unsigned written; /* sectors */ @@ -104,14 +117,16 @@ struct bch_write_op { unsigned compression_type:4; unsigned nr_replicas:4; unsigned nr_replicas_required:4; - unsigned alloc_reserve:4; + unsigned alloc_reserve:3; + unsigned incompressible:1; + unsigned btree_update_ready:1; struct bch_devs_list devs_have; u16 target; u16 nonce; - struct bch_io_opts opts; + u32 subvol; struct bpos pos; struct bversion version; @@ -120,28 +135,27 @@ struct bch_write_op { struct write_point_specifier write_point; + struct write_point *wp; + struct list_head wp_list; + struct disk_reservation res; struct open_buckets open_buckets; - /* - * If caller wants to flush but hasn't passed us a journal_seq ptr, we - * still need to stash the journal_seq somewhere: - */ - union { - u64 *journal_seq_p; - u64 journal_seq; - }; u64 new_i_size; s64 i_sectors_delta; - int (*index_update_fn)(struct bch_write_op *); - struct bch_devs_mask failed; struct keylist insert_keys; u64 inline_keys[BKEY_EXTENT_U64s_MAX * 2]; + /* + * Bitmask of devices that have had nocow writes issued to them since + * last flush: + */ + struct bch_devs_mask *devs_need_flush; + /* Must be last: */ struct bch_write_bio wbio; };