Blame view
fs/nilfs2/mdt.h
3.67 KB
ae98043f5 nilfs2: convert t... |
1 |
/* SPDX-License-Identifier: GPL-2.0+ */ |
5eb563f5f nilfs2: meta data... |
2 3 4 5 6 |
/* * mdt.h - NILFS meta data file prototype and definitions * * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation. * |
4b420ab4e nilfs2: clean up ... |
7 |
* Written by Ryusuke Konishi. |
5eb563f5f nilfs2: meta data... |
8 9 10 11 12 13 14 15 16 |
*/ #ifndef _NILFS_MDT_H #define _NILFS_MDT_H #include <linux/buffer_head.h> #include <linux/blockgroup_lock.h> #include "nilfs.h" #include "page.h" |
f5974c8f8 nilfs2: add omitt... |
17 18 19 20 21 22 23 |
/** * struct nilfs_shadow_map - shadow mapping of meta data file * @bmap_store: shadow copy of bmap state * @frozen_data: shadowed dirty data pages * @frozen_btnodes: shadowed dirty b-tree nodes' pages * @frozen_buffers: list of frozen buffers */ |
ebdfed4dc nilfs2: add routi... |
24 25 26 27 28 29 |
struct nilfs_shadow_map { struct nilfs_bmap_store bmap_store; struct address_space frozen_data; struct address_space frozen_btnodes; struct list_head frozen_buffers; }; |
5eb563f5f nilfs2: meta data... |
30 31 |
/** * struct nilfs_mdt_info - on-memory private data of meta data files |
5eb563f5f nilfs2: meta data... |
32 33 34 35 36 |
* @mi_sem: reader/writer semaphore for meta data operations * @mi_bgl: per-blockgroup locking * @mi_entry_size: size of an entry * @mi_first_entry_offset: offset to the first entry * @mi_entries_per_block: number of entries in a block |
db38d5ad3 nilfs2: add cache... |
37 |
* @mi_palloc_cache: persistent object allocator cache |
ebdfed4dc nilfs2: add routi... |
38 |
* @mi_shadow: shadow of bmap and page caches |
5eb563f5f nilfs2: meta data... |
39 40 41 42 |
* @mi_blocks_per_group: number of blocks in a group * @mi_blocks_per_desc_block: number of blocks per descriptor block */ struct nilfs_mdt_info { |
5eb563f5f nilfs2: meta data... |
43 44 |
struct rw_semaphore mi_sem; struct blockgroup_lock *mi_bgl; |
0c6c44cb9 nilfs2: avoid bar... |
45 46 |
unsigned int mi_entry_size; unsigned int mi_first_entry_offset; |
5eb563f5f nilfs2: meta data... |
47 |
unsigned long mi_entries_per_block; |
db38d5ad3 nilfs2: add cache... |
48 |
struct nilfs_palloc_cache *mi_palloc_cache; |
ebdfed4dc nilfs2: add routi... |
49 |
struct nilfs_shadow_map *mi_shadow; |
5eb563f5f nilfs2: meta data... |
50 51 52 53 54 55 56 57 |
unsigned long mi_blocks_per_group; unsigned long mi_blocks_per_desc_block; }; static inline struct nilfs_mdt_info *NILFS_MDT(const struct inode *inode) { return inode->i_private; } |
2d19961d8 nilfs2: move clea... |
58 59 60 61 |
static inline int nilfs_is_metadata_file_inode(const struct inode *inode) { return inode->i_private != NULL; } |
5eb563f5f nilfs2: meta data... |
62 |
/* Default GFP flags using highmem */ |
71baba4b9 mm, page_alloc: r... |
63 |
#define NILFS_MDT_GFP (__GFP_RECLAIM | __GFP_IO | __GFP_HIGHMEM) |
5eb563f5f nilfs2: meta data... |
64 65 66 67 68 |
int nilfs_mdt_get_block(struct inode *, unsigned long, int, void (*init_block)(struct inode *, struct buffer_head *, void *), struct buffer_head **); |
fa33915c9 nilfs2: add helpe... |
69 70 71 |
int nilfs_mdt_find_block(struct inode *inode, unsigned long start, unsigned long end, unsigned long *blkoff, struct buffer_head **out_bh); |
5eb563f5f nilfs2: meta data... |
72 73 |
int nilfs_mdt_delete_block(struct inode *, unsigned long); int nilfs_mdt_forget_block(struct inode *, unsigned long); |
5eb563f5f nilfs2: meta data... |
74 |
int nilfs_mdt_fetch_dirty(struct inode *); |
f1e89c86f nilfs2: use iget ... |
75 |
int nilfs_mdt_init(struct inode *inode, gfp_t gfp_mask, size_t objsz); |
2d19961d8 nilfs2: move clea... |
76 77 |
void nilfs_mdt_clear(struct inode *inode); void nilfs_mdt_destroy(struct inode *inode); |
0c6c44cb9 nilfs2: avoid bar... |
78 |
void nilfs_mdt_set_entry_size(struct inode *, unsigned int, unsigned int); |
5eb563f5f nilfs2: meta data... |
79 |
|
ebdfed4dc nilfs2: add routi... |
80 81 82 83 84 |
int nilfs_mdt_setup_shadow_map(struct inode *inode, struct nilfs_shadow_map *shadow); int nilfs_mdt_save_to_shadow_map(struct inode *inode); void nilfs_mdt_restore_from_shadow_map(struct inode *inode); void nilfs_mdt_clear_shadow_map(struct inode *inode); |
b1f6a4f29 nilfs2: add routi... |
85 86 87 |
int nilfs_mdt_freeze_buffer(struct inode *inode, struct buffer_head *bh); struct buffer_head *nilfs_mdt_get_frozen_buffer(struct inode *inode, struct buffer_head *bh); |
5eb563f5f nilfs2: meta data... |
88 |
|
5eb563f5f nilfs2: meta data... |
89 90 91 92 93 94 95 96 97 98 99 100 101 |
static inline void nilfs_mdt_mark_dirty(struct inode *inode) { if (!test_bit(NILFS_I_DIRTY, &NILFS_I(inode)->i_state)) set_bit(NILFS_I_DIRTY, &NILFS_I(inode)->i_state); } static inline void nilfs_mdt_clear_dirty(struct inode *inode) { clear_bit(NILFS_I_DIRTY, &NILFS_I(inode)->i_state); } static inline __u64 nilfs_mdt_cno(struct inode *inode) { |
0ef28f9ae nilfs2: get rid o... |
102 |
return ((struct the_nilfs *)inode->i_sb->s_fs_info)->ns_cno; |
5eb563f5f nilfs2: meta data... |
103 |
} |
0de6d6b9a nilfs2: use bgl_l... |
104 105 106 107 108 |
static inline spinlock_t * nilfs_mdt_bgl_lock(struct inode *inode, unsigned int block_group) { return bgl_lock_ptr(NILFS_MDT(inode)->mi_bgl, block_group); } |
5eb563f5f nilfs2: meta data... |
109 |
|
5eb563f5f nilfs2: meta data... |
110 |
#endif /* _NILFS_MDT_H */ |