]>
Commit | Line | Data |
---|---|---|
ae98043f | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
5442680f RK |
2 | /* |
3 | * alloc.h - persistent object (dat entry/disk inode) allocator/deallocator | |
4 | * | |
5 | * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation. | |
6 | * | |
4b420ab4 RK |
7 | * Originally written by Koji Sato. |
8 | * Two allocators were unified by Ryusuke Konishi and Amagai Yoshiji. | |
5442680f RK |
9 | */ |
10 | ||
11 | #ifndef _NILFS_ALLOC_H | |
12 | #define _NILFS_ALLOC_H | |
13 | ||
14 | #include <linux/types.h> | |
15 | #include <linux/buffer_head.h> | |
16 | #include <linux/fs.h> | |
17 | ||
db55d922 RK |
18 | /** |
19 | * nilfs_palloc_entries_per_group - get the number of entries per group | |
20 | * @inode: inode of metadata file using this allocator | |
21 | * | |
22 | * The number of entries per group is defined by the number of bits | |
23 | * that a bitmap block can maintain. | |
24 | */ | |
5442680f RK |
25 | static inline unsigned long |
26 | nilfs_palloc_entries_per_group(const struct inode *inode) | |
27 | { | |
28 | return 1UL << (inode->i_blkbits + 3 /* log2(8 = CHAR_BITS) */); | |
29 | } | |
30 | ||
0c6c44cb | 31 | int nilfs_palloc_init_blockgroup(struct inode *, unsigned int); |
5442680f RK |
32 | int nilfs_palloc_get_entry_block(struct inode *, __u64, int, |
33 | struct buffer_head **); | |
34 | void *nilfs_palloc_block_get_entry(const struct inode *, __u64, | |
35 | const struct buffer_head *, void *); | |
36 | ||
c7ef972c VD |
37 | int nilfs_palloc_count_max_entries(struct inode *, u64, u64 *); |
38 | ||
5442680f | 39 | /** |
7a65004b | 40 | * nilfs_palloc_req - persistent allocator request and reply |
5442680f RK |
41 | * @pr_entry_nr: entry number (vblocknr or inode number) |
42 | * @pr_desc_bh: buffer head of the buffer containing block group descriptors | |
43 | * @pr_bitmap_bh: buffer head of the buffer containing a block group bitmap | |
44 | * @pr_entry_bh: buffer head of the buffer containing translation entries | |
45 | */ | |
46 | struct nilfs_palloc_req { | |
47 | __u64 pr_entry_nr; | |
48 | struct buffer_head *pr_desc_bh; | |
49 | struct buffer_head *pr_bitmap_bh; | |
50 | struct buffer_head *pr_entry_bh; | |
51 | }; | |
52 | ||
53 | int nilfs_palloc_prepare_alloc_entry(struct inode *, | |
54 | struct nilfs_palloc_req *); | |
55 | void nilfs_palloc_commit_alloc_entry(struct inode *, | |
56 | struct nilfs_palloc_req *); | |
57 | void nilfs_palloc_abort_alloc_entry(struct inode *, struct nilfs_palloc_req *); | |
58 | void nilfs_palloc_commit_free_entry(struct inode *, struct nilfs_palloc_req *); | |
59 | int nilfs_palloc_prepare_free_entry(struct inode *, struct nilfs_palloc_req *); | |
60 | void nilfs_palloc_abort_free_entry(struct inode *, struct nilfs_palloc_req *); | |
61 | int nilfs_palloc_freev(struct inode *, __u64 *, size_t); | |
62 | ||
63 | #define nilfs_set_bit_atomic ext2_set_bit_atomic | |
64 | #define nilfs_clear_bit_atomic ext2_clear_bit_atomic | |
a49ebbab | 65 | #define nilfs_find_next_zero_bit find_next_zero_bit_le |
d0c14a9e | 66 | #define nilfs_find_next_bit find_next_bit_le |
5442680f | 67 | |
f5974c8f VD |
68 | /** |
69 | * struct nilfs_bh_assoc - block offset and buffer head association | |
70 | * @blkoff: block offset | |
71 | * @bh: buffer head | |
db38d5ad | 72 | */ |
db38d5ad RK |
73 | struct nilfs_bh_assoc { |
74 | unsigned long blkoff; | |
75 | struct buffer_head *bh; | |
76 | }; | |
77 | ||
f5974c8f VD |
78 | /** |
79 | * struct nilfs_palloc_cache - persistent object allocator cache | |
80 | * @lock: cache protecting lock | |
81 | * @prev_desc: blockgroup descriptors cache | |
82 | * @prev_bitmap: blockgroup bitmap cache | |
83 | * @prev_entry: translation entries cache | |
84 | */ | |
db38d5ad RK |
85 | struct nilfs_palloc_cache { |
86 | spinlock_t lock; | |
87 | struct nilfs_bh_assoc prev_desc; | |
88 | struct nilfs_bh_assoc prev_bitmap; | |
89 | struct nilfs_bh_assoc prev_entry; | |
90 | }; | |
91 | ||
92 | void nilfs_palloc_setup_cache(struct inode *inode, | |
93 | struct nilfs_palloc_cache *cache); | |
94 | void nilfs_palloc_clear_cache(struct inode *inode); | |
95 | void nilfs_palloc_destroy_cache(struct inode *inode); | |
96 | ||
5442680f | 97 | #endif /* _NILFS_ALLOC_H */ |