• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/nilfs2/

Lines Matching defs:cpfile

2  * cpfile.c - NILFS checkpoint file.
30 #include "cpfile.h"
34 nilfs_cpfile_checkpoints_per_block(const struct inode *cpfile)
36 return NILFS_MDT(cpfile)->mi_entries_per_block;
41 nilfs_cpfile_get_blkoff(const struct inode *cpfile, __u64 cno)
43 __u64 tcno = cno + NILFS_MDT(cpfile)->mi_first_entry_offset - 1;
44 do_div(tcno, nilfs_cpfile_checkpoints_per_block(cpfile));
50 nilfs_cpfile_get_offset(const struct inode *cpfile, __u64 cno)
52 __u64 tcno = cno + NILFS_MDT(cpfile)->mi_first_entry_offset - 1;
53 return do_div(tcno, nilfs_cpfile_checkpoints_per_block(cpfile));
57 nilfs_cpfile_checkpoints_in_block(const struct inode *cpfile,
62 nilfs_cpfile_checkpoints_per_block(cpfile) -
63 nilfs_cpfile_get_offset(cpfile, curr),
67 static inline int nilfs_cpfile_is_in_first(const struct inode *cpfile,
70 return nilfs_cpfile_get_blkoff(cpfile, cno) == 0;
74 nilfs_cpfile_block_add_valid_checkpoints(const struct inode *cpfile,
88 nilfs_cpfile_block_sub_valid_checkpoints(const struct inode *cpfile,
103 nilfs_cpfile_block_get_header(const struct inode *cpfile,
111 nilfs_cpfile_block_get_checkpoint(const struct inode *cpfile, __u64 cno,
115 return kaddr + bh_offset(bh) + nilfs_cpfile_get_offset(cpfile, cno) *
116 NILFS_MDT(cpfile)->mi_entry_size;
119 static void nilfs_cpfile_block_init(struct inode *cpfile,
124 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size;
125 int n = nilfs_cpfile_checkpoints_per_block(cpfile);
133 static inline int nilfs_cpfile_get_header_block(struct inode *cpfile,
136 return nilfs_mdt_get_block(cpfile, 0, 0, NULL, bhp);
139 static inline int nilfs_cpfile_get_checkpoint_block(struct inode *cpfile,
144 return nilfs_mdt_get_block(cpfile,
145 nilfs_cpfile_get_blkoff(cpfile, cno),
149 static inline int nilfs_cpfile_delete_checkpoint_block(struct inode *cpfile,
152 return nilfs_mdt_delete_block(cpfile,
153 nilfs_cpfile_get_blkoff(cpfile, cno));
158 * @cpfile: inode of checkpoint file
181 int nilfs_cpfile_get_checkpoint(struct inode *cpfile,
193 if (unlikely(cno < 1 || cno > nilfs_mdt_cno(cpfile) ||
194 (cno < nilfs_mdt_cno(cpfile) && create)))
197 down_write(&NILFS_MDT(cpfile)->mi_sem);
199 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh);
202 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, create, &cp_bh);
206 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
216 if (!nilfs_cpfile_is_in_first(cpfile, cno))
217 nilfs_cpfile_block_add_valid_checkpoints(cpfile, cp_bh,
222 header = nilfs_cpfile_block_get_header(cpfile, header_bh,
227 nilfs_mdt_mark_dirty(cpfile);
238 up_write(&NILFS_MDT(cpfile)->mi_sem);
244 * @cpfile: inode of checkpoint file
252 void nilfs_cpfile_put_checkpoint(struct inode *cpfile, __u64 cno,
261 * @cpfile: inode of checkpoint file
278 int nilfs_cpfile_delete_checkpoints(struct inode *cpfile,
285 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size;
298 down_write(&NILFS_MDT(cpfile)->mi_sem);
300 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh);
306 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, end);
307 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh);
318 cpfile, cno, cp_bh, kaddr);
330 nilfs_mdt_mark_dirty(cpfile);
331 if (!nilfs_cpfile_is_in_first(cpfile, cno)) {
334 cpfile, cp_bh, kaddr, nicps);
341 cpfile, cno);
358 header = nilfs_cpfile_block_get_header(cpfile, header_bh,
362 nilfs_mdt_mark_dirty(cpfile);
369 up_write(&NILFS_MDT(cpfile)->mi_sem);
373 static void nilfs_cpfile_checkpoint_to_cpinfo(struct inode *cpfile,
386 static ssize_t nilfs_cpfile_do_get_cpinfo(struct inode *cpfile, __u64 *cnop,
392 size_t cpsz = NILFS_MDT(cpfile)->mi_entry_size;
393 __u64 cur_cno = nilfs_mdt_cno(cpfile), cno = *cnop;
400 down_read(&NILFS_MDT(cpfile)->mi_sem);
403 ncps = nilfs_cpfile_checkpoints_in_block(cpfile, cno, cur_cno);
404 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &bh);
412 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr);
415 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp,
432 up_read(&NILFS_MDT(cpfile)->mi_sem);
436 static ssize_t nilfs_cpfile_do_get_ssinfo(struct inode *cpfile, __u64 *cnop,
448 down_read(&NILFS_MDT(cpfile)->mi_sem);
451 ret = nilfs_cpfile_get_header_block(cpfile, &bh);
455 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr);
468 curr_blkoff = nilfs_cpfile_get_blkoff(cpfile, curr);
469 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr, 0, &bh);
477 cp = nilfs_cpfile_block_get_checkpoint(cpfile, curr, bh, kaddr);
482 nilfs_cpfile_checkpoint_to_cpinfo(cpfile, cp, ci);
489 next_blkoff = nilfs_cpfile_get_blkoff(cpfile, next);
493 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next,
510 up_read(&NILFS_MDT(cpfile)->mi_sem);
516 * @cpfile:
522 ssize_t nilfs_cpfile_get_cpinfo(struct inode *cpfile, __u64 *cnop, int mode,
527 return nilfs_cpfile_do_get_cpinfo(cpfile, cnop, buf, cisz, nci);
529 return nilfs_cpfile_do_get_ssinfo(cpfile, cnop, buf, cisz, nci);
537 * @cpfile:
540 int nilfs_cpfile_delete_checkpoint(struct inode *cpfile, __u64 cno)
546 nci = nilfs_cpfile_do_get_cpinfo(cpfile, &tcno, &ci, sizeof(ci), 1);
554 return nilfs_cpfile_delete_checkpoints(cpfile, cno, cno + 1);
558 nilfs_cpfile_block_get_snapshot_list(const struct inode *cpfile,
568 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr);
571 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr);
577 static int nilfs_cpfile_set_snapshot(struct inode *cpfile, __u64 cno)
590 down_write(&NILFS_MDT(cpfile)->mi_sem);
592 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh);
596 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
609 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh);
613 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr);
621 prev_blkoff = nilfs_cpfile_get_blkoff(cpfile, prev);
626 ret = nilfs_cpfile_get_checkpoint_block(cpfile, curr,
634 cpfile, curr, curr_bh, kaddr);
641 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0,
652 cpfile, curr, curr_bh, kaddr);
657 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
665 cpfile, prev, prev_bh, kaddr);
670 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr);
678 nilfs_mdt_mark_dirty(cpfile);
692 up_write(&NILFS_MDT(cpfile)->mi_sem);
696 static int nilfs_cpfile_clear_snapshot(struct inode *cpfile, __u64 cno)
708 down_write(&NILFS_MDT(cpfile)->mi_sem);
710 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh);
714 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
731 ret = nilfs_cpfile_get_header_block(cpfile, &header_bh);
735 ret = nilfs_cpfile_get_checkpoint_block(cpfile, next, 0,
744 ret = nilfs_cpfile_get_checkpoint_block(cpfile, prev, 0,
755 cpfile, next, next_bh, kaddr);
761 cpfile, prev, prev_bh, kaddr);
766 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, cp_bh, kaddr);
773 header = nilfs_cpfile_block_get_header(cpfile, header_bh, kaddr);
781 nilfs_mdt_mark_dirty(cpfile);
795 up_write(&NILFS_MDT(cpfile)->mi_sem);
801 * @cpfile: inode of checkpoint file
816 int nilfs_cpfile_is_snapshot(struct inode *cpfile, __u64 cno)
825 if (cno == 0 || cno >= nilfs_mdt_cno(cpfile))
827 down_read(&NILFS_MDT(cpfile)->mi_sem);
829 ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &bh);
833 cp = nilfs_cpfile_block_get_checkpoint(cpfile, cno, bh, kaddr);
842 up_read(&NILFS_MDT(cpfile)->mi_sem);
848 * @cpfile: inode of checkpoint file
864 int nilfs_cpfile_change_cpmode(struct inode *cpfile, __u64 cno, int mode)
869 nilfs = NILFS_MDT(cpfile)->mi_nilfs;
886 ret = nilfs_cpfile_clear_snapshot(cpfile, cno);
889 return nilfs_cpfile_set_snapshot(cpfile, cno);
897 * @cpfile: inode of checkpoint file
910 int nilfs_cpfile_get_stat(struct inode *cpfile, struct nilfs_cpstat *cpstat)
917 down_read(&NILFS_MDT(cpfile)->mi_sem);
919 ret = nilfs_cpfile_get_header_block(cpfile, &bh);
923 header = nilfs_cpfile_block_get_header(cpfile, bh, kaddr);
924 cpstat->cs_cno = nilfs_mdt_cno(cpfile);
931 up_read(&NILFS_MDT(cpfile)->mi_sem);
936 * nilfs_cpfile_read - read cpfile inode
937 * @cpfile: cpfile inode
938 * @raw_inode: on-disk cpfile inode
940 int nilfs_cpfile_read(struct inode *cpfile, struct nilfs_inode *raw_inode)
942 return nilfs_read_inode_common(cpfile, raw_inode);
946 * nilfs_cpfile_new - create cpfile
952 struct inode *cpfile;
954 cpfile = nilfs_mdt_new(nilfs, NULL, NILFS_CPFILE_INO, 0);
955 if (cpfile)
956 nilfs_mdt_set_entry_size(cpfile, cpsize,
958 return cpfile;