diff options
-rw-r--r-- | fs/nilfs2/recovery.c | 2 | ||||
-rw-r--r-- | fs/nilfs2/segbuf.c | 4 | ||||
-rw-r--r-- | fs/nilfs2/segbuf.h | 4 | ||||
-rw-r--r-- | fs/nilfs2/segment.c | 3 | ||||
-rw-r--r-- | include/linux/nilfs2_fs.h | 2 |
5 files changed, 12 insertions, 3 deletions
diff --git a/fs/nilfs2/recovery.c b/fs/nilfs2/recovery.c index ba43146f3c30..bae2a516b4ee 100644 --- a/fs/nilfs2/recovery.c +++ b/fs/nilfs2/recovery.c | |||
@@ -105,6 +105,8 @@ static void store_segsum_info(struct nilfs_segsum_info *ssi, | |||
105 | 105 | ||
106 | ssi->nsumblk = DIV_ROUND_UP(ssi->sumbytes, blocksize); | 106 | ssi->nsumblk = DIV_ROUND_UP(ssi->sumbytes, blocksize); |
107 | ssi->nfileblk = ssi->nblocks - ssi->nsumblk - !!NILFS_SEG_HAS_SR(ssi); | 107 | ssi->nfileblk = ssi->nblocks - ssi->nsumblk - !!NILFS_SEG_HAS_SR(ssi); |
108 | |||
109 | /* need to verify ->ss_bytes field if read ->ss_cno */ | ||
108 | } | 110 | } |
109 | 111 | ||
110 | /** | 112 | /** |
diff --git a/fs/nilfs2/segbuf.c b/fs/nilfs2/segbuf.c index 9f83bc02593c..2e6a2723b8fa 100644 --- a/fs/nilfs2/segbuf.c +++ b/fs/nilfs2/segbuf.c | |||
@@ -134,7 +134,7 @@ int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *segbuf, | |||
134 | } | 134 | } |
135 | 135 | ||
136 | int nilfs_segbuf_reset(struct nilfs_segment_buffer *segbuf, unsigned flags, | 136 | int nilfs_segbuf_reset(struct nilfs_segment_buffer *segbuf, unsigned flags, |
137 | time_t ctime) | 137 | time_t ctime, __u64 cno) |
138 | { | 138 | { |
139 | int err; | 139 | int err; |
140 | 140 | ||
@@ -147,6 +147,7 @@ int nilfs_segbuf_reset(struct nilfs_segment_buffer *segbuf, unsigned flags, | |||
147 | segbuf->sb_sum.sumbytes = sizeof(struct nilfs_segment_summary); | 147 | segbuf->sb_sum.sumbytes = sizeof(struct nilfs_segment_summary); |
148 | segbuf->sb_sum.nfinfo = segbuf->sb_sum.nfileblk = 0; | 148 | segbuf->sb_sum.nfinfo = segbuf->sb_sum.nfileblk = 0; |
149 | segbuf->sb_sum.ctime = ctime; | 149 | segbuf->sb_sum.ctime = ctime; |
150 | segbuf->sb_sum.cno = cno; | ||
150 | return 0; | 151 | return 0; |
151 | } | 152 | } |
152 | 153 | ||
@@ -172,6 +173,7 @@ void nilfs_segbuf_fill_in_segsum(struct nilfs_segment_buffer *segbuf) | |||
172 | raw_sum->ss_nfinfo = cpu_to_le32(segbuf->sb_sum.nfinfo); | 173 | raw_sum->ss_nfinfo = cpu_to_le32(segbuf->sb_sum.nfinfo); |
173 | raw_sum->ss_sumbytes = cpu_to_le32(segbuf->sb_sum.sumbytes); | 174 | raw_sum->ss_sumbytes = cpu_to_le32(segbuf->sb_sum.sumbytes); |
174 | raw_sum->ss_pad = 0; | 175 | raw_sum->ss_pad = 0; |
176 | raw_sum->ss_cno = cpu_to_le64(segbuf->sb_sum.cno); | ||
175 | } | 177 | } |
176 | 178 | ||
177 | /* | 179 | /* |
diff --git a/fs/nilfs2/segbuf.h b/fs/nilfs2/segbuf.h index e21497f61b0c..fdf1c3b6d673 100644 --- a/fs/nilfs2/segbuf.h +++ b/fs/nilfs2/segbuf.h | |||
@@ -37,6 +37,7 @@ | |||
37 | * @sumbytes: Byte count of segment summary | 37 | * @sumbytes: Byte count of segment summary |
38 | * @nfileblk: Total number of file blocks | 38 | * @nfileblk: Total number of file blocks |
39 | * @seg_seq: Segment sequence number | 39 | * @seg_seq: Segment sequence number |
40 | * @cno: Checkpoint number | ||
40 | * @ctime: Creation time | 41 | * @ctime: Creation time |
41 | * @next: Block number of the next full segment | 42 | * @next: Block number of the next full segment |
42 | */ | 43 | */ |
@@ -48,6 +49,7 @@ struct nilfs_segsum_info { | |||
48 | unsigned long sumbytes; | 49 | unsigned long sumbytes; |
49 | unsigned long nfileblk; | 50 | unsigned long nfileblk; |
50 | u64 seg_seq; | 51 | u64 seg_seq; |
52 | __u64 cno; | ||
51 | time_t ctime; | 53 | time_t ctime; |
52 | sector_t next; | 54 | sector_t next; |
53 | }; | 55 | }; |
@@ -135,7 +137,7 @@ void nilfs_segbuf_map_cont(struct nilfs_segment_buffer *segbuf, | |||
135 | struct nilfs_segment_buffer *prev); | 137 | struct nilfs_segment_buffer *prev); |
136 | void nilfs_segbuf_set_next_segnum(struct nilfs_segment_buffer *, __u64, | 138 | void nilfs_segbuf_set_next_segnum(struct nilfs_segment_buffer *, __u64, |
137 | struct the_nilfs *); | 139 | struct the_nilfs *); |
138 | int nilfs_segbuf_reset(struct nilfs_segment_buffer *, unsigned, time_t); | 140 | int nilfs_segbuf_reset(struct nilfs_segment_buffer *, unsigned, time_t, __u64); |
139 | int nilfs_segbuf_extend_segsum(struct nilfs_segment_buffer *); | 141 | int nilfs_segbuf_extend_segsum(struct nilfs_segment_buffer *); |
140 | int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *, | 142 | int nilfs_segbuf_extend_payload(struct nilfs_segment_buffer *, |
141 | struct buffer_head **); | 143 | struct buffer_head **); |
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index a17bfa193e3f..9f50fde0cd06 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c | |||
@@ -366,7 +366,8 @@ static int nilfs_segctor_reset_segment_buffer(struct nilfs_sc_info *sci) | |||
366 | 366 | ||
367 | if (nilfs_doing_gc()) | 367 | if (nilfs_doing_gc()) |
368 | flags = NILFS_SS_GC; | 368 | flags = NILFS_SS_GC; |
369 | err = nilfs_segbuf_reset(segbuf, flags, sci->sc_seg_ctime); | 369 | err = nilfs_segbuf_reset(segbuf, flags, sci->sc_seg_ctime, |
370 | sci->sc_sbi->s_nilfs->ns_cno); | ||
370 | if (unlikely(err)) | 371 | if (unlikely(err)) |
371 | return err; | 372 | return err; |
372 | 373 | ||
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h index f960e1d264e8..6505c00f1fc1 100644 --- a/include/linux/nilfs2_fs.h +++ b/include/linux/nilfs2_fs.h | |||
@@ -377,6 +377,7 @@ union nilfs_binfo { | |||
377 | * @ss_nfinfo: number of finfo structures | 377 | * @ss_nfinfo: number of finfo structures |
378 | * @ss_sumbytes: total size of segment summary in bytes | 378 | * @ss_sumbytes: total size of segment summary in bytes |
379 | * @ss_pad: padding | 379 | * @ss_pad: padding |
380 | * @ss_cno: checkpoint number | ||
380 | */ | 381 | */ |
381 | struct nilfs_segment_summary { | 382 | struct nilfs_segment_summary { |
382 | __le32 ss_datasum; | 383 | __le32 ss_datasum; |
@@ -391,6 +392,7 @@ struct nilfs_segment_summary { | |||
391 | __le32 ss_nfinfo; | 392 | __le32 ss_nfinfo; |
392 | __le32 ss_sumbytes; | 393 | __le32 ss_sumbytes; |
393 | __le32 ss_pad; | 394 | __le32 ss_pad; |
395 | __le64 ss_cno; | ||
394 | /* array of finfo structures */ | 396 | /* array of finfo structures */ |
395 | }; | 397 | }; |
396 | 398 | ||