X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libbcachefs%2Fio_types.h;h=4149291c0df6f153f8f7a147eed75487767efd18;hb=c08971632cf3133545259ec5fa008201ca169582;hp=b23727d212b9d9353a0f9bc3531c9508d0c29351;hpb=cd9892e543845e045142ed29e4a5a9ce446a205e;p=bcachefs-tools-debian diff --git a/libbcachefs/io_types.h b/libbcachefs/io_types.h index b23727d..4149291 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,10 +83,12 @@ 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 dev; @@ -84,7 +97,10 @@ struct bch_write_bio { bounce:1, put_bio:1, have_ioref:1, - used_mempool:1; + nocow:1, + used_mempool:1, + first_btree_write:1; + ); struct bio bio; }; @@ -105,12 +121,14 @@ struct bch_write_op { unsigned nr_replicas_required:4; unsigned alloc_reserve: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; @@ -119,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; };