struct dm_bio_prison { spinlock_t lock; /* 0 4 */ /* XXX 4 bytes hole, try to pack */ mempool_t * cell_pool; /* 8 8 */ struct rb_root cells; /* 16 8 */ /* size: 24, cachelines: 1, members: 3 */ /* sum members: 20, holes: 1, sum holes: 4 */ /* last cacheline: 24 bytes */ }; struct dm_bio_prison_v2 { struct workqueue_struct * wq; /* 0 8 */ spinlock_t lock; /* 8 4 */ /* XXX 4 bytes hole, try to pack */ mempool_t * cell_pool; /* 16 8 */ struct rb_root cells; /* 24 8 */ /* size: 32, cachelines: 1, members: 4 */ /* sum members: 28, holes: 1, sum holes: 4 */ /* last cacheline: 32 bytes */ }; struct cache { struct dm_target * ti; /* 0 8 */ struct dm_target_callbacks callbacks; /* 8 24 */ struct dm_cache_metadata * cmd; /* 32 8 */ struct dm_dev * metadata_dev; /* 40 8 */ struct dm_dev * origin_dev; /* 48 8 */ struct dm_dev * cache_dev; /* 56 8 */ /* --- cacheline 1 boundary (64 bytes) --- */ dm_oblock_t origin_blocks; /* 64 8 */ sector_t origin_sectors; /* 72 8 */ dm_cblock_t cache_size; /* 80 4 */ /* XXX 4 bytes hole, try to pack */ sector_t sectors_per_block; /* 88 8 */ int sectors_per_block_shift; /* 96 4 */ spinlock_t lock; /* 100 4 */ struct bio_list deferred_bios; /* 104 16 */ sector_t migration_threshold; /* 120 8 */ /* --- cacheline 2 boundary (128 bytes) --- */ wait_queue_head_t migration_wait; /* 128 24 */ atomic_t nr_allocated_migrations; /* 152 4 */ atomic_t nr_io_migrations; /* 156 4 */ struct rw_semaphore quiesce_lock; /* 160 40 */ /* --- cacheline 3 boundary (192 bytes) was 8 bytes ago --- */ atomic_t nr_dirty; /* 200 4 */ /* XXX 4 bytes hole, try to pack */ long unsigned int * dirty_bitset; /* 208 8 */ dm_dblock_t discard_nr_blocks; /* 216 8 */ long unsigned int * discard_bitset; /* 224 8 */ uint32_t discard_block_size; /* 232 4 */ unsigned int nr_ctr_args; /* 236 4 */ const char * * ctr_args; /* 240 8 */ struct dm_kcopyd_client * copier; /* 248 8 */ /* --- cacheline 4 boundary (256 bytes) --- */ struct workqueue_struct * wq; /* 256 8 */ struct work_struct deferred_bio_worker; /* 264 32 */ struct work_struct migration_worker; /* 296 32 */ /* --- cacheline 5 boundary (320 bytes) was 8 bytes ago --- */ struct delayed_work waker; /* 328 88 */ /* --- cacheline 6 boundary (384 bytes) was 32 bytes ago --- */ struct dm_bio_prison_v2 * prison; /* 416 8 */ struct bio_set * bs; /* 424 8 */ mempool_t * migration_pool; /* 432 8 */ struct dm_cache_policy * policy; /* 440 8 */ /* --- cacheline 7 boundary (448 bytes) --- */ unsigned int policy_nr_args; /* 448 4 */ bool need_tick_bio:1; /* 452: 7 1 */ bool sized:1; /* 452: 6 1 */ bool invalidate:1; /* 452: 5 1 */ bool commit_requested:1; /* 452: 4 1 */ bool loaded_mappings:1; /* 452: 3 1 */ bool loaded_discards:1; /* 452: 2 1 */ /* XXX 2 bits hole, try to pack */ /* XXX 3 bytes hole, try to pack */ struct cache_features features; /* 456 12 */ struct cache_stats stats; /* 468 44 */ /* --- cacheline 8 boundary (512 bytes) --- */ spinlock_t invalidation_lock; /* 512 4 */ /* XXX 4 bytes hole, try to pack */ struct list_head invalidation_requests; /* 520 16 */ struct io_tracker tracker; /* 536 32 */ struct work_struct commit_ws; /* 568 32 */ /* --- cacheline 9 boundary (576 bytes) was 24 bytes ago --- */ struct batcher committer; /* 600 120 */ /* --- cacheline 11 boundary (704 bytes) was 16 bytes ago --- */ struct rw_semaphore background_work_lock; /* 720 40 */ /* size: 760, cachelines: 12, members: 49 */ /* sum members: 745, holes: 4, sum holes: 15 */ /* bit holes: 1, sum bit holes: 2 bits */ /* last cacheline: 56 bytes */ }; struct mapped_device { struct mutex suspend_lock; /* 0 32 */ void * map; /* 32 8 */ struct list_head table_devices; /* 40 16 */ struct mutex table_devices_lock; /* 56 32 */ /* --- cacheline 1 boundary (64 bytes) was 24 bytes ago --- */ long unsigned int flags; /* 88 8 */ struct request_queue * queue; /* 96 8 */ int numa_node_id; /* 104 4 */ enum dm_queue_mode type; /* 108 4 */ struct mutex type_lock; /* 112 32 */ /* --- cacheline 2 boundary (128 bytes) was 16 bytes ago --- */ atomic_t holders; /* 144 4 */ atomic_t open_count; /* 148 4 */ struct dm_target * immutable_target; /* 152 8 */ struct target_type * immutable_target_type; /* 160 8 */ struct gendisk * disk; /* 168 8 */ struct dax_device * dax_dev; /* 176 8 */ char name[16]; /* 184 16 */ /* --- cacheline 3 boundary (192 bytes) was 8 bytes ago --- */ void * interface_ptr; /* 200 8 */ atomic_t pending[2]; /* 208 8 */ wait_queue_head_t wait; /* 216 24 */ struct work_struct work; /* 240 32 */ /* --- cacheline 4 boundary (256 bytes) was 16 bytes ago --- */ spinlock_t deferred_lock; /* 272 4 */ /* XXX 4 bytes hole, try to pack */ struct bio_list deferred; /* 280 16 */ wait_queue_head_t eventq; /* 296 24 */ /* --- cacheline 5 boundary (320 bytes) --- */ atomic_t event_nr; /* 320 4 */ atomic_t uevent_seq; /* 324 4 */ struct list_head uevent_list; /* 328 16 */ spinlock_t uevent_lock; /* 344 4 */ unsigned int internal_suspend_count; /* 348 4 */ struct workqueue_struct * wq; /* 352 8 */ struct bio_set * io_bs; /* 360 8 */ struct bio_set * bs; /* 368 8 */ struct super_block * frozen_sb; /* 376 8 */ /* --- cacheline 6 boundary (384 bytes) --- */ struct hd_geometry geometry; /* 384 16 */ struct block_device * bdev; /* 400 8 */ struct dm_kobject_holder kobj_holder; /* 408 96 */ /* --- cacheline 7 boundary (448 bytes) was 56 bytes ago --- */ struct bio flush_bio; /* 504 152 */ /* --- cacheline 10 boundary (640 bytes) was 16 bytes ago --- */ struct dm_stats stats; /* 656 72 */ /* --- cacheline 11 boundary (704 bytes) was 24 bytes ago --- */ struct kthread_worker kworker; /* 728 56 */ /* --- cacheline 12 boundary (768 bytes) was 16 bytes ago --- */ struct task_struct * kworker_task; /* 784 8 */ unsigned int seq_rq_merge_deadline_usecs; /* 792 4 */ int last_rq_rw; /* 796 4 */ sector_t last_rq_pos; /* 800 8 */ ktime_t last_rq_start_time; /* 808 8 */ struct blk_mq_tag_set * tag_set; /* 816 8 */ bool use_blk_mq:1; /* 824: 7 1 */ bool init_tio_pdu:1; /* 824: 6 1 */ /* XXX 6 bits hole, try to pack */ /* XXX 7 bytes hole, try to pack */ /* --- cacheline 13 boundary (832 bytes) --- */ struct srcu_struct io_barrier; /* 832 50336 */ /* --- cacheline 799 boundary (51136 bytes) was 32 bytes ago --- */ /* size: 51168, cachelines: 800, members: 47 */ /* sum members: 51157, holes: 2, sum holes: 11 */ /* bit holes: 1, sum bit holes: 6 bits */ /* last cacheline: 32 bytes */ }; struct crypt_config { struct dm_dev * dev; /* 0 8 */ sector_t start; /* 8 8 */ mempool_t * req_pool; /* 16 8 */ mempool_t * page_pool; /* 24 8 */ mempool_t * tag_pool; /* 32 8 */ unsigned int tag_pool_max_sectors; /* 40 4 */ /* XXX 4 bytes hole, try to pack */ struct percpu_counter n_allocated_pages; /* 48 40 */ /* --- cacheline 1 boundary (64 bytes) was 24 bytes ago --- */ struct bio_set * bs; /* 88 8 */ struct mutex bio_alloc_lock; /* 96 32 */ /* --- cacheline 2 boundary (128 bytes) --- */ struct workqueue_struct * io_queue; /* 128 8 */ struct workqueue_struct * crypt_queue; /* 136 8 */ struct task_struct * write_thread; /* 144 8 */ wait_queue_head_t write_thread_wait; /* 152 24 */ struct rb_root write_tree; /* 176 8 */ char * cipher; /* 184 8 */ /* --- cacheline 3 boundary (192 bytes) --- */ char * cipher_string; /* 192 8 */ char * cipher_auth; /* 200 8 */ char * key_string; /* 208 8 */ const struct crypt_iv_operations * iv_gen_ops; /* 216 8 */ union { struct iv_essiv_private essiv; /* 16 */ struct iv_benbi_private benbi; /* 4 */ struct iv_lmk_private lmk; /* 16 */ struct iv_tcw_private tcw; /* 24 */ } iv_gen_private; /* 224 24 */ sector_t iv_offset; /* 248 8 */ /* --- cacheline 4 boundary (256 bytes) --- */ unsigned int iv_size; /* 256 4 */ short unsigned int sector_size; /* 260 2 */ unsigned char sector_shift; /* 262 1 */ /* XXX 1 byte hole, try to pack */ void * iv_private; /* 264 8 */ union { struct crypto_skcipher * * tfms; /* 8 */ struct crypto_aead * * tfms_aead; /* 8 */ } cipher_tfm; /* 272 8 */ unsigned int tfms_count; /* 280 4 */ /* XXX 4 bytes hole, try to pack */ long unsigned int cipher_flags; /* 288 8 */ unsigned int dmreq_start; /* 296 4 */ unsigned int per_bio_data_size; /* 300 4 */ long unsigned int flags; /* 304 8 */ unsigned int key_size; /* 312 4 */ unsigned int key_parts; /* 316 4 */ /* --- cacheline 5 boundary (320 bytes) --- */ unsigned int key_extra_size; /* 320 4 */ unsigned int key_mac_size; /* 324 4 */ unsigned int integrity_tag_size; /* 328 4 */ unsigned int integrity_iv_size; /* 332 4 */ unsigned int on_disk_tag_size; /* 336 4 */ /* XXX 4 bytes hole, try to pack */ u8 * authenc_key; /* 344 8 */ u8 key[0]; /* 352 0 */ /* size: 352, cachelines: 6, members: 40 */ /* sum members: 339, holes: 4, sum holes: 13 */ /* last cacheline: 32 bytes */ }; struct dm_integrity_c { struct dm_dev * dev; /* 0 8 */ unsigned int tag_size; /* 8 4 */ __s8 log2_tag_size; /* 12 1 */ /* XXX 3 bytes hole, try to pack */ sector_t start; /* 16 8 */ mempool_t * journal_io_mempool; /* 24 8 */ struct dm_io_client * io; /* 32 8 */ struct dm_bufio_client * bufio; /* 40 8 */ struct workqueue_struct * metadata_wq; /* 48 8 */ struct superblock * sb; /* 56 8 */ /* --- cacheline 1 boundary (64 bytes) --- */ unsigned int journal_pages; /* 64 4 */ /* XXX 4 bytes hole, try to pack */ struct page_list * journal; /* 72 8 */ struct page_list * journal_io; /* 80 8 */ struct page_list * journal_xor; /* 88 8 */ struct crypto_skcipher * journal_crypt; /* 96 8 */ struct scatterlist * * journal_scatterlist; /* 104 8 */ struct scatterlist * * journal_io_scatterlist; /* 112 8 */ struct skcipher_request * * sk_requests; /* 120 8 */ /* --- cacheline 2 boundary (128 bytes) --- */ struct crypto_shash * journal_mac; /* 128 8 */ struct journal_node * journal_tree; /* 136 8 */ struct rb_root journal_tree_root; /* 144 8 */ sector_t provided_data_sectors; /* 152 8 */ short unsigned int journal_entry_size; /* 160 2 */ unsigned char journal_entries_per_sector; /* 162 1 */ unsigned char journal_section_entries; /* 163 1 */ short unsigned int journal_section_sectors; /* 164 2 */ /* XXX 2 bytes hole, try to pack */ unsigned int journal_sections; /* 168 4 */ unsigned int journal_entries; /* 172 4 */ sector_t device_sectors; /* 176 8 */ unsigned int initial_sectors; /* 184 4 */ unsigned int metadata_run; /* 188 4 */ /* --- cacheline 3 boundary (192 bytes) --- */ __s8 log2_metadata_run; /* 192 1 */ __u8 log2_buffer_sectors; /* 193 1 */ __u8 sectors_per_block; /* 194 1 */ unsigned char mode; /* 195 1 */ bool suspending; /* 196 1 */ /* XXX 3 bytes hole, try to pack */ int failed; /* 200 4 */ /* XXX 4 bytes hole, try to pack */ struct crypto_shash * internal_hash; /* 208 8 */ struct rb_root in_progress; /* 216 8 */ wait_queue_head_t endio_wait; /* 224 24 */ struct workqueue_struct * wait_wq; /* 248 8 */ /* --- cacheline 4 boundary (256 bytes) --- */ unsigned char commit_seq; /* 256 1 */ /* XXX 7 bytes hole, try to pack */ commit_id_t commit_ids[4]; /* 264 32 */ unsigned int committed_section; /* 296 4 */ unsigned int n_committed_sections; /* 300 4 */ unsigned int uncommitted_section; /* 304 4 */ unsigned int n_uncommitted_sections; /* 308 4 */ unsigned int free_section; /* 312 4 */ unsigned char free_section_entry; /* 316 1 */ /* XXX 3 bytes hole, try to pack */ /* --- cacheline 5 boundary (320 bytes) --- */ unsigned int free_sectors; /* 320 4 */ unsigned int free_sectors_threshold; /* 324 4 */ struct workqueue_struct * commit_wq; /* 328 8 */ struct work_struct commit_work; /* 336 32 */ struct workqueue_struct * writer_wq; /* 368 8 */ struct work_struct writer_work; /* 376 32 */ /* --- cacheline 6 boundary (384 bytes) was 24 bytes ago --- */ struct bio_list flush_bio_list; /* 408 16 */ long unsigned int autocommit_jiffies; /* 424 8 */ struct timer_list autocommit_timer; /* 432 40 */ /* --- cacheline 7 boundary (448 bytes) was 24 bytes ago --- */ unsigned int autocommit_msec; /* 472 4 */ /* XXX 4 bytes hole, try to pack */ wait_queue_head_t copy_to_journal_wait; /* 480 24 */ struct completion crypto_backoff; /* 504 32 */ /* --- cacheline 8 boundary (512 bytes) was 24 bytes ago --- */ bool journal_uptodate; /* 536 1 */ bool just_formatted; /* 537 1 */ /* XXX 6 bytes hole, try to pack */ struct alg_spec internal_hash_alg; /* 544 32 */ /* --- cacheline 9 boundary (576 bytes) --- */ struct alg_spec journal_crypt_alg; /* 576 32 */ struct alg_spec journal_mac_alg; /* 608 32 */ /* --- cacheline 10 boundary (640 bytes) --- */ atomic64_t number_of_mismatches; /* 640 8 */ /* size: 648, cachelines: 11, members: 66 */ /* sum members: 612, holes: 9, sum holes: 36 */ /* last cacheline: 8 bytes */ }; struct dm_io_client { mempool_t * pool; /* 0 8 */ struct bio_set * bios; /* 8 8 */ /* size: 16, cachelines: 1, members: 2 */ /* last cacheline: 16 bytes */ }; struct dm_kcopyd_client { struct page_list * pages; /* 0 8 */ unsigned int nr_reserved_pages; /* 8 4 */ unsigned int nr_free_pages; /* 12 4 */ struct dm_io_client * io_client; /* 16 8 */ wait_queue_head_t destroyq; /* 24 24 */ atomic_t nr_jobs; /* 48 4 */ /* XXX 4 bytes hole, try to pack */ mempool_t * job_pool; /* 56 8 */ /* --- cacheline 1 boundary (64 bytes) --- */ struct workqueue_struct * kcopyd_wq; /* 64 8 */ struct work_struct kcopyd_work; /* 72 32 */ struct dm_kcopyd_throttle * throttle; /* 104 8 */ spinlock_t job_lock; /* 112 4 */ /* XXX 4 bytes hole, try to pack */ struct list_head complete_jobs; /* 120 16 */ /* --- cacheline 2 boundary (128 bytes) was 8 bytes ago --- */ struct list_head io_jobs; /* 136 16 */ struct list_head pages_jobs; /* 152 16 */ /* size: 168, cachelines: 3, members: 14 */ /* sum members: 160, holes: 2, sum holes: 8 */ /* last cacheline: 40 bytes */ }; struct dm_region_hash { uint32_t region_size; /* 0 4 */ unsigned int region_shift; /* 4 4 */ struct dm_dirty_log * log; /* 8 8 */ rwlock_t hash_lock; /* 16 8 */ mempool_t * region_pool; /* 24 8 */ unsigned int mask; /* 32 4 */ unsigned int nr_buckets; /* 36 4 */ unsigned int prime; /* 40 4 */ unsigned int shift; /* 44 4 */ struct list_head * buckets; /* 48 8 */ unsigned int max_recovery; /* 56 4 */ spinlock_t region_lock; /* 60 4 */ /* --- cacheline 1 boundary (64 bytes) --- */ atomic_t recovery_in_flight; /* 64 4 */ /* XXX 4 bytes hole, try to pack */ struct semaphore recovery_count; /* 72 24 */ struct list_head clean_regions; /* 96 16 */ struct list_head quiesced_regions; /* 112 16 */ /* --- cacheline 2 boundary (128 bytes) --- */ struct list_head recovered_regions; /* 128 16 */ struct list_head failed_recovered_regions; /* 144 16 */ int flush_failure; /* 160 4 */ /* XXX 4 bytes hole, try to pack */ void * context; /* 168 8 */ sector_t target_begin; /* 176 8 */ void (*dispatch_bios)(void *, struct bio_list *); /* 184 8 */ /* --- cacheline 3 boundary (192 bytes) --- */ void (*wakeup_workers)(void *); /* 192 8 */ void (*wakeup_all_recovery_waiters)(void *); /* 200 8 */ /* size: 208, cachelines: 4, members: 24 */ /* sum members: 200, holes: 2, sum holes: 8 */ /* last cacheline: 16 bytes */ }; struct dm_snapshot { struct mutex lock; /* 0 32 */ struct dm_dev * origin; /* 32 8 */ struct dm_dev * cow; /* 40 8 */ struct dm_target * ti; /* 48 8 */ struct list_head list; /* 56 16 */ /* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */ int valid; /* 72 4 */ int snapshot_overflowed; /* 76 4 */ int active; /* 80 4 */ atomic_t pending_exceptions_count; /* 84 4 */ sector_t exception_start_sequence; /* 88 8 */ sector_t exception_complete_sequence; /* 96 8 */ struct list_head out_of_order_list; /* 104 16 */ mempool_t * pending_pool; /* 120 8 */ /* --- cacheline 2 boundary (128 bytes) --- */ struct dm_exception_table pending; /* 128 16 */ struct dm_exception_table complete; /* 144 16 */ spinlock_t pe_lock; /* 160 4 */ spinlock_t tracked_chunk_lock; /* 164 4 */ struct hlist_head tracked_chunk_hash[16]; /* 168 128 */ /* --- cacheline 4 boundary (256 bytes) was 40 bytes ago --- */ struct dm_exception_store * store; /* 296 8 */ struct dm_kcopyd_client * kcopyd_client; /* 304 8 */ long unsigned int state_bits; /* 312 8 */ /* --- cacheline 5 boundary (320 bytes) --- */ chunk_t first_merging_chunk; /* 320 8 */ int num_merging_chunks; /* 328 4 */ int merge_failed; /* 332 4 */ struct bio_list bios_queued_during_merge; /* 336 16 */ /* size: 352, cachelines: 6, members: 25 */ /* last cacheline: 32 bytes */ }; struct pool { struct list_head list; /* 0 16 */ struct dm_target * ti; /* 16 8 */ struct mapped_device * pool_md; /* 24 8 */ struct block_device * md_dev; /* 32 8 */ struct dm_pool_metadata * pmd; /* 40 8 */ dm_block_t low_water_blocks; /* 48 8 */ uint32_t sectors_per_block; /* 56 4 */ int sectors_per_block_shift; /* 60 4 */ /* --- cacheline 1 boundary (64 bytes) --- */ struct pool_features pf; /* 64 8 */ bool low_water_triggered:1; /* 72: 7 1 */ bool suspended:1; /* 72: 6 1 */ bool out_of_data_space:1; /* 72: 5 1 */ /* XXX 5 bits hole, try to pack */ /* XXX 7 bytes hole, try to pack */ struct dm_bio_prison * prison; /* 80 8 */ struct dm_kcopyd_client * copier; /* 88 8 */ struct workqueue_struct * wq; /* 96 8 */ struct throttle throttle; /* 104 56 */ /* --- cacheline 2 boundary (128 bytes) was 32 bytes ago --- */ struct work_struct worker; /* 160 32 */ /* --- cacheline 3 boundary (192 bytes) --- */ struct delayed_work waker; /* 192 88 */ /* --- cacheline 4 boundary (256 bytes) was 24 bytes ago --- */ struct delayed_work no_space_timeout; /* 280 88 */ /* --- cacheline 5 boundary (320 bytes) was 48 bytes ago --- */ long unsigned int last_commit_jiffies; /* 368 8 */ unsigned int ref_count; /* 376 4 */ spinlock_t lock; /* 380 4 */ /* --- cacheline 6 boundary (384 bytes) --- */ struct bio_list deferred_flush_bios; /* 384 16 */ struct list_head prepared_mappings; /* 400 16 */ struct list_head prepared_discards; /* 416 16 */ struct list_head prepared_discards_pt2; /* 432 16 */ /* --- cacheline 7 boundary (448 bytes) --- */ struct list_head active_thins; /* 448 16 */ struct dm_deferred_set * shared_read_ds; /* 464 8 */ struct dm_deferred_set * all_io_ds; /* 472 8 */ struct dm_thin_new_mapping * next_mapping; /* 480 8 */ mempool_t * mapping_pool; /* 488 8 */ process_bio_fn process_bio; /* 496 8 */ process_bio_fn process_discard; /* 504 8 */ /* --- cacheline 8 boundary (512 bytes) --- */ process_cell_fn process_cell; /* 512 8 */ process_cell_fn process_discard_cell; /* 520 8 */ process_mapping_fn process_prepared_mapping; /* 528 8 */ process_mapping_fn process_prepared_discard; /* 536 8 */ process_mapping_fn process_prepared_discard_pt2; /* 544 8 */ struct dm_bio_prison_cell * * cell_sort_array; /* 552 8 */ /* size: 560, cachelines: 9, members: 39 */ /* sum members: 553, holes: 1, sum holes: 7 */ /* bit holes: 1, sum bit holes: 5 bits */ /* last cacheline: 48 bytes */ }; struct dm_verity_fec { struct dm_dev * dev; /* 0 8 */ struct dm_bufio_client * data_bufio; /* 8 8 */ struct dm_bufio_client * bufio; /* 16 8 */ sector_t start; /* 24 8 */ sector_t blocks; /* 32 8 */ sector_t rounds; /* 40 8 */ sector_t hash_blocks; /* 48 8 */ unsigned char roots; /* 56 1 */ unsigned char rsn; /* 57 1 */ /* XXX 6 bytes hole, try to pack */ /* --- cacheline 1 boundary (64 bytes) --- */ mempool_t * rs_pool; /* 64 8 */ mempool_t * prealloc_pool; /* 72 8 */ mempool_t * extra_pool; /* 80 8 */ mempool_t * output_pool; /* 88 8 */ struct kmem_cache * cache; /* 96 8 */ /* size: 104, cachelines: 2, members: 14 */ /* sum members: 98, holes: 1, sum holes: 6 */ /* last cacheline: 40 bytes */ }; struct dmz_target { struct dm_dev * ddev; /* 0 8 */ long unsigned int flags; /* 8 8 */ struct dmz_dev * dev; /* 16 8 */ struct dmz_metadata * metadata; /* 24 8 */ struct dmz_reclaim * reclaim; /* 32 8 */ struct mutex chunk_lock; /* 40 32 */ /* --- cacheline 1 boundary (64 bytes) was 8 bytes ago --- */ struct radix_tree_root chunk_rxtree; /* 72 16 */ struct workqueue_struct * chunk_wq; /* 88 8 */ struct bio_set * bio_set; /* 96 8 */ spinlock_t flush_lock; /* 104 4 */ /* XXX 4 bytes hole, try to pack */ struct bio_list flush_list; /* 112 16 */ /* --- cacheline 2 boundary (128 bytes) --- */ struct delayed_work flush_work; /* 128 88 */ /* --- cacheline 3 boundary (192 bytes) was 24 bytes ago --- */ struct workqueue_struct * flush_wq; /* 216 8 */ /* size: 224, cachelines: 4, members: 13 */ /* sum members: 220, holes: 1, sum holes: 4 */ /* last cacheline: 32 bytes */ };