diff options
author | Mike Snitzer <snitzer@redhat.com> | 2010-03-05 21:32:33 -0500 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2010-03-05 21:32:33 -0500 |
commit | 924e600d417ead9ef67043988055ba236f114718 (patch) | |
tree | 338db5dfc0f8fe8f9aa39bd19639ad1f1dc27e46 | |
parent | 3abf85b5b5851b5f28d3d8a920ebb844edd08352 (diff) |
dm: eliminate some holes data structures
Eliminate a 4-byte hole in 'struct dm_io_memory' by moving 'offset' above the
'ptr' to which it applies (size reduced from 24 to 16 bytes). And by
association, 1-4 byte hole is eliminated in 'struct dm_io_request' (size
reduced from 56 to 48 bytes).
Eliminate all 6 4-byte holes and 1 cache-line in 'struct dm_snapshot' (size
reduced from 392 to 368 bytes).
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
-rw-r--r-- | drivers/md/dm-snap.c | 26 | ||||
-rw-r--r-- | include/linux/dm-io.h | 4 |
2 files changed, 15 insertions, 15 deletions
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 0789c22ff0d4..54853773510c 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c | |||
@@ -83,10 +83,10 @@ struct dm_snapshot { | |||
83 | /* Whether or not owning mapped_device is suspended */ | 83 | /* Whether or not owning mapped_device is suspended */ |
84 | int suspended; | 84 | int suspended; |
85 | 85 | ||
86 | mempool_t *pending_pool; | ||
87 | |||
88 | atomic_t pending_exceptions_count; | 86 | atomic_t pending_exceptions_count; |
89 | 87 | ||
88 | mempool_t *pending_pool; | ||
89 | |||
90 | struct dm_exception_table pending; | 90 | struct dm_exception_table pending; |
91 | struct dm_exception_table complete; | 91 | struct dm_exception_table complete; |
92 | 92 | ||
@@ -96,6 +96,11 @@ struct dm_snapshot { | |||
96 | */ | 96 | */ |
97 | spinlock_t pe_lock; | 97 | spinlock_t pe_lock; |
98 | 98 | ||
99 | /* Chunks with outstanding reads */ | ||
100 | spinlock_t tracked_chunk_lock; | ||
101 | mempool_t *tracked_chunk_pool; | ||
102 | struct hlist_head tracked_chunk_hash[DM_TRACKED_CHUNK_HASH_SIZE]; | ||
103 | |||
99 | /* The on disk metadata handler */ | 104 | /* The on disk metadata handler */ |
100 | struct dm_exception_store *store; | 105 | struct dm_exception_store *store; |
101 | 106 | ||
@@ -105,10 +110,12 @@ struct dm_snapshot { | |||
105 | struct bio_list queued_bios; | 110 | struct bio_list queued_bios; |
106 | struct work_struct queued_bios_work; | 111 | struct work_struct queued_bios_work; |
107 | 112 | ||
108 | /* Chunks with outstanding reads */ | 113 | /* Wait for events based on state_bits */ |
109 | mempool_t *tracked_chunk_pool; | 114 | unsigned long state_bits; |
110 | spinlock_t tracked_chunk_lock; | 115 | |
111 | struct hlist_head tracked_chunk_hash[DM_TRACKED_CHUNK_HASH_SIZE]; | 116 | /* Range of chunks currently being merged. */ |
117 | chunk_t first_merging_chunk; | ||
118 | int num_merging_chunks; | ||
112 | 119 | ||
113 | /* | 120 | /* |
114 | * The merge operation failed if this flag is set. | 121 | * The merge operation failed if this flag is set. |
@@ -125,13 +132,6 @@ struct dm_snapshot { | |||
125 | */ | 132 | */ |
126 | int merge_failed; | 133 | int merge_failed; |
127 | 134 | ||
128 | /* Wait for events based on state_bits */ | ||
129 | unsigned long state_bits; | ||
130 | |||
131 | /* Range of chunks currently being merged. */ | ||
132 | chunk_t first_merging_chunk; | ||
133 | int num_merging_chunks; | ||
134 | |||
135 | /* | 135 | /* |
136 | * Incoming bios that overlap with chunks being merged must wait | 136 | * Incoming bios that overlap with chunks being merged must wait |
137 | * for them to be committed. | 137 | * for them to be committed. |
diff --git a/include/linux/dm-io.h b/include/linux/dm-io.h index b6bf17ee2f61..5c9186b93fff 100644 --- a/include/linux/dm-io.h +++ b/include/linux/dm-io.h | |||
@@ -37,14 +37,14 @@ enum dm_io_mem_type { | |||
37 | struct dm_io_memory { | 37 | struct dm_io_memory { |
38 | enum dm_io_mem_type type; | 38 | enum dm_io_mem_type type; |
39 | 39 | ||
40 | unsigned offset; | ||
41 | |||
40 | union { | 42 | union { |
41 | struct page_list *pl; | 43 | struct page_list *pl; |
42 | struct bio_vec *bvec; | 44 | struct bio_vec *bvec; |
43 | void *vma; | 45 | void *vma; |
44 | void *addr; | 46 | void *addr; |
45 | } ptr; | 47 | } ptr; |
46 | |||
47 | unsigned offset; | ||
48 | }; | 48 | }; |
49 | 49 | ||
50 | struct dm_io_notify { | 50 | struct dm_io_notify { |