/** * nilfs_cpfile_delete_checkpoint - * @cpfile: * @cno: */ int nilfs_cpfile_delete_checkpoint(struct inode *cpfile, __u64 cno) { struct nilfs_cpinfo ci; __u64 tcno = cno; ssize_t nci; nci = nilfs_cpfile_do_get_cpinfo(cpfile, &tcno, &ci, sizeof(ci), 1); if (nci < 0) return nci; else if (nci == 0 || ci.ci_cno != cno) return -ENOENT; else if (nilfs_cpinfo_snapshot(&ci)) return -EBUSY; return nilfs_cpfile_delete_checkpoints(cpfile, cno, cno + 1); }
static void lscp_print_cpinfo(struct nilfs_cpinfo *cpinfo) { struct tm tm; time_t t; char timebuf[LSCP_BUFSIZE]; t = (time_t)cpinfo->ci_create; localtime_r(&t, &tm); strftime(timebuf, LSCP_BUFSIZE, "%F %T", &tm); printf("%20llu %s %s %s %12llu %10llu\n", (unsigned long long)cpinfo->ci_cno, timebuf, nilfs_cpinfo_snapshot(cpinfo) ? "ss" : "cp", nilfs_cpinfo_minor(cpinfo) ? "i" : "-", (unsigned long long)(show_block_count ? cpinfo->ci_blocks_count : cpinfo->ci_nblk_inc), (unsigned long long)cpinfo->ci_inodes_count); }
static int lscp_search_snapshot(struct nilfs *nilfs, struct nilfs_cpstat *cpstat, nilfs_cno_t *sidx) { nilfs_cno_t cno; __u64 nreq; ssize_t n, i; for (cno = *sidx, nreq = 1; cno < cpstat->cs_cno; cno += n, nreq = cpstat->cs_cno - cno) { n = lscp_get_cpinfo(nilfs, cno, NILFS_CHECKPOINT, nreq); if (n < 0) return n; if (!n) break; for (i = 0; i < n; i++) { if (nilfs_cpinfo_snapshot(&cpinfos[i])) { *sidx = cpinfos[i].ci_cno; return 1; } } } return 0; }