diff options
-rw-r--r-- | fs/nilfs2/segbuf.c | 39 | ||||
-rw-r--r-- | fs/nilfs2/segbuf.h | 3 | ||||
-rw-r--r-- | fs/nilfs2/segment.c | 33 |
3 files changed, 39 insertions, 36 deletions
diff --git a/fs/nilfs2/segbuf.c b/fs/nilfs2/segbuf.c index a24ca9cc6afb..6bf3b1f3406e 100644 --- a/fs/nilfs2/segbuf.c +++ b/fs/nilfs2/segbuf.c | |||
@@ -202,8 +202,8 @@ void nilfs_segbuf_fill_in_segsum(struct nilfs_segment_buffer *segbuf) | |||
202 | /* | 202 | /* |
203 | * CRC calculation routines | 203 | * CRC calculation routines |
204 | */ | 204 | */ |
205 | void nilfs_segbuf_fill_in_segsum_crc(struct nilfs_segment_buffer *segbuf, | 205 | static void |
206 | u32 seed) | 206 | nilfs_segbuf_fill_in_segsum_crc(struct nilfs_segment_buffer *segbuf, u32 seed) |
207 | { | 207 | { |
208 | struct buffer_head *bh; | 208 | struct buffer_head *bh; |
209 | struct nilfs_segment_summary *raw_sum; | 209 | struct nilfs_segment_summary *raw_sum; |
@@ -230,8 +230,8 @@ void nilfs_segbuf_fill_in_segsum_crc(struct nilfs_segment_buffer *segbuf, | |||
230 | raw_sum->ss_sumsum = cpu_to_le32(crc); | 230 | raw_sum->ss_sumsum = cpu_to_le32(crc); |
231 | } | 231 | } |
232 | 232 | ||
233 | void nilfs_segbuf_fill_in_data_crc(struct nilfs_segment_buffer *segbuf, | 233 | static void nilfs_segbuf_fill_in_data_crc(struct nilfs_segment_buffer *segbuf, |
234 | u32 seed) | 234 | u32 seed) |
235 | { | 235 | { |
236 | struct buffer_head *bh; | 236 | struct buffer_head *bh; |
237 | struct nilfs_segment_summary *raw_sum; | 237 | struct nilfs_segment_summary *raw_sum; |
@@ -257,6 +257,20 @@ void nilfs_segbuf_fill_in_data_crc(struct nilfs_segment_buffer *segbuf, | |||
257 | raw_sum->ss_datasum = cpu_to_le32(crc); | 257 | raw_sum->ss_datasum = cpu_to_le32(crc); |
258 | } | 258 | } |
259 | 259 | ||
260 | static void | ||
261 | nilfs_segbuf_fill_in_super_root_crc(struct nilfs_segment_buffer *segbuf, | ||
262 | u32 seed) | ||
263 | { | ||
264 | struct nilfs_super_root *raw_sr; | ||
265 | u32 crc; | ||
266 | |||
267 | raw_sr = (struct nilfs_super_root *)segbuf->sb_super_root->b_data; | ||
268 | crc = crc32_le(seed, | ||
269 | (unsigned char *)raw_sr + sizeof(raw_sr->sr_sum), | ||
270 | NILFS_SR_BYTES - sizeof(raw_sr->sr_sum)); | ||
271 | raw_sr->sr_sum = cpu_to_le32(crc); | ||
272 | } | ||
273 | |||
260 | static void nilfs_release_buffers(struct list_head *list) | 274 | static void nilfs_release_buffers(struct list_head *list) |
261 | { | 275 | { |
262 | struct buffer_head *bh, *n; | 276 | struct buffer_head *bh, *n; |
@@ -336,6 +350,23 @@ int nilfs_wait_on_logs(struct list_head *logs) | |||
336 | return ret; | 350 | return ret; |
337 | } | 351 | } |
338 | 352 | ||
353 | /** | ||
354 | * nilfs_add_checksums_on_logs - add checksums on the logs | ||
355 | * @logs: list of segment buffers storing target logs | ||
356 | * @seed: checksum seed value | ||
357 | */ | ||
358 | void nilfs_add_checksums_on_logs(struct list_head *logs, u32 seed) | ||
359 | { | ||
360 | struct nilfs_segment_buffer *segbuf; | ||
361 | |||
362 | list_for_each_entry(segbuf, logs, sb_list) { | ||
363 | if (segbuf->sb_super_root) | ||
364 | nilfs_segbuf_fill_in_super_root_crc(segbuf, seed); | ||
365 | nilfs_segbuf_fill_in_segsum_crc(segbuf, seed); | ||
366 | nilfs_segbuf_fill_in_data_crc(segbuf, seed); | ||
367 | } | ||
368 | } | ||
369 | |||
339 | /* | 370 | /* |
340 | * BIO operations | 371 | * BIO operations |
341 | */ | 372 | */ |
diff --git a/fs/nilfs2/segbuf.h b/fs/nilfs2/segbuf.h index a1a0af6119ea..ae12c2c3e370 100644 --- a/fs/nilfs2/segbuf.h +++ b/fs/nilfs2/segbuf.h | |||
@@ -139,8 +139,6 @@ int nilfs_segbuf_extend_segsum(struct nilfs_segment_buffer *); | |||
139 | int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *, | 139 | int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *, |
140 | struct buffer_head **); | 140 | struct buffer_head **); |
141 | void nilfs_segbuf_fill_in_segsum(struct nilfs_segment_buffer *); | 141 | void nilfs_segbuf_fill_in_segsum(struct nilfs_segment_buffer *); |
142 | void nilfs_segbuf_fill_in_segsum_crc(struct nilfs_segment_buffer *, u32); | ||
143 | void nilfs_segbuf_fill_in_data_crc(struct nilfs_segment_buffer *, u32); | ||
144 | 142 | ||
145 | static inline void | 143 | static inline void |
146 | nilfs_segbuf_add_segsum_buffer(struct nilfs_segment_buffer *segbuf, | 144 | nilfs_segbuf_add_segsum_buffer(struct nilfs_segment_buffer *segbuf, |
@@ -173,6 +171,7 @@ void nilfs_truncate_logs(struct list_head *logs, | |||
173 | struct nilfs_segment_buffer *last); | 171 | struct nilfs_segment_buffer *last); |
174 | int nilfs_write_logs(struct list_head *logs, struct the_nilfs *nilfs); | 172 | int nilfs_write_logs(struct list_head *logs, struct the_nilfs *nilfs); |
175 | int nilfs_wait_on_logs(struct list_head *logs); | 173 | int nilfs_wait_on_logs(struct list_head *logs); |
174 | void nilfs_add_checksums_on_logs(struct list_head *logs, u32 seed); | ||
176 | 175 | ||
177 | static inline void nilfs_destroy_logs(struct list_head *logs) | 176 | static inline void nilfs_destroy_logs(struct list_head *logs) |
178 | { | 177 | { |
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index 7ab0270b2629..f649f0189589 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c | |||
@@ -932,35 +932,6 @@ static void nilfs_segctor_fill_in_file_bmap(struct nilfs_sc_info *sci, | |||
932 | } | 932 | } |
933 | } | 933 | } |
934 | 934 | ||
935 | /* | ||
936 | * CRC calculation routines | ||
937 | */ | ||
938 | static void nilfs_fill_in_super_root_crc(struct buffer_head *bh_sr, u32 seed) | ||
939 | { | ||
940 | struct nilfs_super_root *raw_sr = | ||
941 | (struct nilfs_super_root *)bh_sr->b_data; | ||
942 | u32 crc; | ||
943 | |||
944 | crc = crc32_le(seed, | ||
945 | (unsigned char *)raw_sr + sizeof(raw_sr->sr_sum), | ||
946 | NILFS_SR_BYTES - sizeof(raw_sr->sr_sum)); | ||
947 | raw_sr->sr_sum = cpu_to_le32(crc); | ||
948 | } | ||
949 | |||
950 | static void nilfs_segctor_fill_in_checksums(struct nilfs_sc_info *sci, | ||
951 | u32 seed) | ||
952 | { | ||
953 | struct nilfs_segment_buffer *segbuf; | ||
954 | |||
955 | list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) { | ||
956 | if (segbuf->sb_super_root) | ||
957 | nilfs_fill_in_super_root_crc(segbuf->sb_super_root, | ||
958 | seed); | ||
959 | nilfs_segbuf_fill_in_segsum_crc(segbuf, seed); | ||
960 | nilfs_segbuf_fill_in_data_crc(segbuf, seed); | ||
961 | } | ||
962 | } | ||
963 | |||
964 | static void nilfs_segctor_fill_in_super_root(struct nilfs_sc_info *sci, | 935 | static void nilfs_segctor_fill_in_super_root(struct nilfs_sc_info *sci, |
965 | struct the_nilfs *nilfs) | 936 | struct the_nilfs *nilfs) |
966 | { | 937 | { |
@@ -2174,7 +2145,9 @@ static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode) | |||
2174 | nilfs_abort_logs(&sci->sc_segbufs, failed_page, err); | 2145 | nilfs_abort_logs(&sci->sc_segbufs, failed_page, err); |
2175 | goto failed_to_write; | 2146 | goto failed_to_write; |
2176 | } | 2147 | } |
2177 | nilfs_segctor_fill_in_checksums(sci, nilfs->ns_crc_seed); | 2148 | |
2149 | nilfs_add_checksums_on_logs(&sci->sc_segbufs, | ||
2150 | nilfs->ns_crc_seed); | ||
2178 | 2151 | ||
2179 | err = nilfs_segctor_write(sci, nilfs); | 2152 | err = nilfs_segctor_write(sci, nilfs); |
2180 | if (unlikely(err)) | 2153 | if (unlikely(err)) |