From 8a253c2d041f35c2705e457b85565dd89bdb1997 Mon Sep 17 00:00:00 2001 From: Ryusuke Konishi Date: Mon, 6 Apr 2009 19:01:50 -0700 Subject: [PATCH] --- yaml --- r: 142632 b: refs/heads/master c: 76068c4ff1cc03d9d24d17fd9e6a1475bc2f6730 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/nilfs2/cpfile.c | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index b4b303a4e350..6b70c4a59721 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8acfbf0939e98cc77dab94c24899c9930ddd1e13 +refs/heads/master: 76068c4ff1cc03d9d24d17fd9e6a1475bc2f6730 diff --git a/trunk/fs/nilfs2/cpfile.c b/trunk/fs/nilfs2/cpfile.c index 50dff147744f..218b34418508 100644 --- a/trunk/fs/nilfs2/cpfile.c +++ b/trunk/fs/nilfs2/cpfile.c @@ -382,13 +382,13 @@ static void nilfs_cpfile_checkpoint_to_cpinfo(struct inode *cpfile, ci->ci_next = le64_to_cpu(cp->cp_snapshot_list.ssl_next); } -static ssize_t nilfs_cpfile_do_get_cpinfo(struct inode *cpfile, __u64 cno, +static ssize_t nilfs_cpfile_do_get_cpinfo(struct inode *cpfile, __u64 *cnop, struct nilfs_cpinfo *ci, size_t nci) { struct nilfs_checkpoint *cp; struct buffer_head *bh; size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size; - __u64 cur_cno = nilfs_mdt_cno(cpfile); + __u64 cur_cno = nilfs_mdt_cno(cpfile), cno = *cnop; void *kaddr; int n, ret; int ncps, i; @@ -416,6 +416,8 @@ static ssize_t nilfs_cpfile_do_get_cpinfo(struct inode *cpfile, __u64 cno, } ret = n; + if (n > 0) + *cnop = ci[n - 1].ci_cno + 1; out: up_read(&NILFS_MDT(cpfile)->mi_sem); @@ -510,7 +512,7 @@ ssize_t nilfs_cpfile_get_cpinfo(struct inode *cpfile, __u64 *cnop, int mode, { switch (mode) { case NILFS_CHECKPOINT: - return nilfs_cpfile_do_get_cpinfo(cpfile, *cnop, ci, nci); + return nilfs_cpfile_do_get_cpinfo(cpfile, cnop, ci, nci); case NILFS_SNAPSHOT: return nilfs_cpfile_do_get_ssinfo(cpfile, cnop, ci, nci); default: @@ -526,13 +528,14 @@ ssize_t nilfs_cpfile_get_cpinfo(struct inode *cpfile, __u64 *cnop, int mode, int nilfs_cpfile_delete_checkpoint(struct inode *cpfile, __u64 cno) { struct nilfs_cpinfo ci; + __u64 tcno = cno; ssize_t nci; int ret; /* checkpoint number 0 is invalid */ if (cno == 0) return -ENOENT; - nci = nilfs_cpfile_do_get_cpinfo(cpfile, cno, &ci, 1); + nci = nilfs_cpfile_do_get_cpinfo(cpfile, &tcno, &ci, 1); if (nci < 0) return nci; else if (nci == 0 || ci.ci_cno != cno)