/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _BCACHEFS_IO_WRITE_TYPES_H #define _BCACHEFS_IO_WRITE_TYPES_H #include "alloc_types.h" #include "btree_types.h" #include "buckets_types.h" #include "extents_types.h" #include "keylist_types.h" #include "opts.h" #include "super_types.h" #include <linux/llist.h> #include <linux/workqueue.h> struct bch_write_bio { struct_group(wbio, struct bch_fs *c; struct bch_write_bio *parent; u64 submit_time; u64 inode_offset; u64 nocow_bucket; struct bch_devs_list failed; u8 dev; unsigned split:1, bounce:1, put_bio:1, have_ioref:1, nocow:1, used_mempool:1, first_btree_write:1; ); struct bio bio; }; struct bch_write_op { struct closure cl; struct bch_fs *c; void (*end_io)(struct bch_write_op *); u64 start_time; unsigned written; /* sectors */ u16 flags; s16 error; /* dio write path expects it to hold -ERESTARTSYS... */ unsigned compression_opt:8; unsigned csum_type:4; unsigned nr_replicas:4; unsigned nr_replicas_required:4; 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; /* For BCH_WRITE_DATA_ENCODED: */ struct bch_extent_crc_unpacked crc; struct write_point_specifier write_point; struct write_point *wp; struct list_head wp_list; struct disk_reservation res; struct open_buckets open_buckets; u64 new_i_size; s64 i_sectors_delta; 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; }; #endif /* _BCACHEFS_IO_WRITE_TYPES_H */