diff options
Diffstat (limited to 'fs/nilfs2/dat.c')
-rw-r--r-- | fs/nilfs2/dat.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/fs/nilfs2/dat.c b/fs/nilfs2/dat.c index 1ff8e15bd36b..187dd07ba86c 100644 --- a/fs/nilfs2/dat.c +++ b/fs/nilfs2/dat.c | |||
@@ -33,6 +33,16 @@ | |||
33 | #define NILFS_CNO_MIN ((__u64)1) | 33 | #define NILFS_CNO_MIN ((__u64)1) |
34 | #define NILFS_CNO_MAX (~(__u64)0) | 34 | #define NILFS_CNO_MAX (~(__u64)0) |
35 | 35 | ||
36 | struct nilfs_dat_info { | ||
37 | struct nilfs_mdt_info mi; | ||
38 | struct nilfs_palloc_cache palloc_cache; | ||
39 | }; | ||
40 | |||
41 | static inline struct nilfs_dat_info *NILFS_DAT_I(struct inode *dat) | ||
42 | { | ||
43 | return (struct nilfs_dat_info *)NILFS_MDT(dat); | ||
44 | } | ||
45 | |||
36 | static int nilfs_dat_prepare_entry(struct inode *dat, | 46 | static int nilfs_dat_prepare_entry(struct inode *dat, |
37 | struct nilfs_palloc_req *req, int create) | 47 | struct nilfs_palloc_req *req, int create) |
38 | { | 48 | { |
@@ -425,3 +435,40 @@ ssize_t nilfs_dat_get_vinfo(struct inode *dat, void *buf, unsigned visz, | |||
425 | 435 | ||
426 | return nvi; | 436 | return nvi; |
427 | } | 437 | } |
438 | |||
439 | /** | ||
440 | * nilfs_dat_read - read dat inode | ||
441 | * @dat: dat inode | ||
442 | * @raw_inode: on-disk dat inode | ||
443 | */ | ||
444 | int nilfs_dat_read(struct inode *dat, struct nilfs_inode *raw_inode) | ||
445 | { | ||
446 | return nilfs_read_inode_common(dat, raw_inode); | ||
447 | } | ||
448 | |||
449 | /** | ||
450 | * nilfs_dat_new - create dat file | ||
451 | * @nilfs: nilfs object | ||
452 | * @entry_size: size of a dat entry | ||
453 | */ | ||
454 | struct inode *nilfs_dat_new(struct the_nilfs *nilfs, size_t entry_size) | ||
455 | { | ||
456 | static struct lock_class_key dat_lock_key; | ||
457 | struct inode *dat; | ||
458 | struct nilfs_dat_info *di; | ||
459 | int err; | ||
460 | |||
461 | dat = nilfs_mdt_new(nilfs, NULL, NILFS_DAT_INO, sizeof(*di)); | ||
462 | if (dat) { | ||
463 | err = nilfs_palloc_init_blockgroup(dat, entry_size); | ||
464 | if (unlikely(err)) { | ||
465 | nilfs_mdt_destroy(dat); | ||
466 | return NULL; | ||
467 | } | ||
468 | |||
469 | di = NILFS_DAT_I(dat); | ||
470 | lockdep_set_class(&di->mi.mi_sem, &dat_lock_key); | ||
471 | nilfs_palloc_setup_cache(dat, &di->palloc_cache); | ||
472 | } | ||
473 | return dat; | ||
474 | } | ||