diff options
-rw-r--r-- | fs/nilfs2/segment.c | 9 | ||||
-rw-r--r-- | fs/nilfs2/segment.h | 3 | ||||
-rw-r--r-- | include/linux/nilfs2_fs.h | 3 |
3 files changed, 15 insertions, 0 deletions
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index 981c34a0cd69..2879704509fd 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c | |||
@@ -462,6 +462,9 @@ static void nilfs_segctor_begin_finfo(struct nilfs_sc_info *sci, | |||
462 | sci->sc_binfo_ptr = sci->sc_finfo_ptr; | 462 | sci->sc_binfo_ptr = sci->sc_finfo_ptr; |
463 | nilfs_segctor_map_segsum_entry( | 463 | nilfs_segctor_map_segsum_entry( |
464 | sci, &sci->sc_binfo_ptr, sizeof(struct nilfs_finfo)); | 464 | sci, &sci->sc_binfo_ptr, sizeof(struct nilfs_finfo)); |
465 | |||
466 | if (inode->i_sb && !test_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags)) | ||
467 | set_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags); | ||
465 | /* skip finfo */ | 468 | /* skip finfo */ |
466 | } | 469 | } |
467 | 470 | ||
@@ -887,6 +890,11 @@ static int nilfs_segctor_fill_in_checkpoint(struct nilfs_sc_info *sci) | |||
887 | raw_cp->cp_create = cpu_to_le64(sci->sc_seg_ctime); | 890 | raw_cp->cp_create = cpu_to_le64(sci->sc_seg_ctime); |
888 | raw_cp->cp_cno = cpu_to_le64(nilfs->ns_cno); | 891 | raw_cp->cp_cno = cpu_to_le64(nilfs->ns_cno); |
889 | 892 | ||
893 | if (test_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags)) | ||
894 | nilfs_checkpoint_clear_minor(raw_cp); | ||
895 | else | ||
896 | nilfs_checkpoint_set_minor(raw_cp); | ||
897 | |||
890 | nilfs_write_inode_common(sbi->s_ifile, &raw_cp->cp_ifile_inode, 1); | 898 | nilfs_write_inode_common(sbi->s_ifile, &raw_cp->cp_ifile_inode, 1); |
891 | nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, bh_cp); | 899 | nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, bh_cp); |
892 | return 0; | 900 | return 0; |
@@ -2091,6 +2099,7 @@ static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci) | |||
2091 | nilfs_set_last_segment(nilfs, segbuf->sb_pseg_start, | 2099 | nilfs_set_last_segment(nilfs, segbuf->sb_pseg_start, |
2092 | segbuf->sb_sum.seg_seq, nilfs->ns_cno); | 2100 | segbuf->sb_sum.seg_seq, nilfs->ns_cno); |
2093 | 2101 | ||
2102 | clear_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags); | ||
2094 | clear_bit(NILFS_SC_DIRTY, &sci->sc_flags); | 2103 | clear_bit(NILFS_SC_DIRTY, &sci->sc_flags); |
2095 | set_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags); | 2104 | set_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags); |
2096 | } else | 2105 | } else |
diff --git a/fs/nilfs2/segment.h b/fs/nilfs2/segment.h index fbd162d71707..bb7d417fec62 100644 --- a/fs/nilfs2/segment.h +++ b/fs/nilfs2/segment.h | |||
@@ -185,6 +185,9 @@ enum { | |||
185 | NILFS_SC_SUPER_ROOT, /* The latest segment has a super root */ | 185 | NILFS_SC_SUPER_ROOT, /* The latest segment has a super root */ |
186 | NILFS_SC_PRIOR_FLUSH, /* Requesting immediate flush without making a | 186 | NILFS_SC_PRIOR_FLUSH, /* Requesting immediate flush without making a |
187 | checkpoint */ | 187 | checkpoint */ |
188 | NILFS_SC_HAVE_DELTA, /* Next checkpoint will have update of files | ||
189 | other than DAT, cpfile, sufile, or files | ||
190 | moved by GC */ | ||
188 | }; | 191 | }; |
189 | 192 | ||
190 | /* sc_state */ | 193 | /* sc_state */ |
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h index e9c84aa4a8e1..cbce6647f7fd 100644 --- a/include/linux/nilfs2_fs.h +++ b/include/linux/nilfs2_fs.h | |||
@@ -470,6 +470,7 @@ enum { | |||
470 | NILFS_CHECKPOINT_SNAPSHOT, | 470 | NILFS_CHECKPOINT_SNAPSHOT, |
471 | NILFS_CHECKPOINT_INVALID, | 471 | NILFS_CHECKPOINT_INVALID, |
472 | NILFS_CHECKPOINT_SKETCH, | 472 | NILFS_CHECKPOINT_SKETCH, |
473 | NILFS_CHECKPOINT_MINOR, | ||
473 | }; | 474 | }; |
474 | 475 | ||
475 | #define NILFS_CHECKPOINT_FNS(flag, name) \ | 476 | #define NILFS_CHECKPOINT_FNS(flag, name) \ |
@@ -494,6 +495,7 @@ nilfs_checkpoint_##name(const struct nilfs_checkpoint *cp) \ | |||
494 | 495 | ||
495 | NILFS_CHECKPOINT_FNS(SNAPSHOT, snapshot) | 496 | NILFS_CHECKPOINT_FNS(SNAPSHOT, snapshot) |
496 | NILFS_CHECKPOINT_FNS(INVALID, invalid) | 497 | NILFS_CHECKPOINT_FNS(INVALID, invalid) |
498 | NILFS_CHECKPOINT_FNS(MINOR, minor) | ||
497 | 499 | ||
498 | /** | 500 | /** |
499 | * struct nilfs_cpinfo - checkpoint information | 501 | * struct nilfs_cpinfo - checkpoint information |
@@ -526,6 +528,7 @@ nilfs_cpinfo_##name(const struct nilfs_cpinfo *cpinfo) \ | |||
526 | 528 | ||
527 | NILFS_CPINFO_FNS(SNAPSHOT, snapshot) | 529 | NILFS_CPINFO_FNS(SNAPSHOT, snapshot) |
528 | NILFS_CPINFO_FNS(INVALID, invalid) | 530 | NILFS_CPINFO_FNS(INVALID, invalid) |
531 | NILFS_CPINFO_FNS(MINOR, minor) | ||
529 | 532 | ||
530 | 533 | ||
531 | /** | 534 | /** |