X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libbcachefs%2Fio_types.h;h=0fbdfbf90ad836282eab3d55761c0f6aa0b2e821;hb=ffa950ce1d59344ff621659b845416b8a526127f;hp=684e4c9a5d98958feb613046ae8c609a6987487b;hpb=ac0d08877aa87a9cdf493bc6f336c391fb4e04a0;p=bcachefs-tools-debian diff --git a/libbcachefs/io_types.h b/libbcachefs/io_types.h index 684e4c9..0fbdfbf 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; @@ -72,20 +83,24 @@ struct bch_read_bio { }; struct bch_write_bio { + struct_group(wbio, struct bch_fs *c; 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; }; @@ -104,14 +119,16 @@ struct bch_write_op { unsigned compression_type:4; unsigned nr_replicas:4; unsigned nr_replicas_required:4; - unsigned alloc_reserve:3; + unsigned watermark:3; unsigned incompressible:1; + unsigned stripe_waited: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 +137,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; };