Lines Matching refs:inode
40 nilfs_palloc_groups_per_desc_block(const struct inode *inode) in nilfs_palloc_groups_per_desc_block() argument
42 return (1UL << inode->i_blkbits) / in nilfs_palloc_groups_per_desc_block()
51 nilfs_palloc_groups_count(const struct inode *inode) in nilfs_palloc_groups_count() argument
53 return 1UL << (BITS_PER_LONG - (inode->i_blkbits + 3 /* log2(8) */)); in nilfs_palloc_groups_count()
61 int nilfs_palloc_init_blockgroup(struct inode *inode, unsigned entry_size) in nilfs_palloc_init_blockgroup() argument
63 struct nilfs_mdt_info *mi = NILFS_MDT(inode); in nilfs_palloc_init_blockgroup()
71 nilfs_mdt_set_entry_size(inode, entry_size, 0); in nilfs_palloc_init_blockgroup()
74 DIV_ROUND_UP(nilfs_palloc_entries_per_group(inode), in nilfs_palloc_init_blockgroup()
79 nilfs_palloc_groups_per_desc_block(inode) * in nilfs_palloc_init_blockgroup()
92 static unsigned long nilfs_palloc_group(const struct inode *inode, __u64 nr, in nilfs_palloc_group() argument
97 *offset = do_div(group, nilfs_palloc_entries_per_group(inode)); in nilfs_palloc_group()
110 nilfs_palloc_desc_blkoff(const struct inode *inode, unsigned long group) in nilfs_palloc_desc_blkoff() argument
113 group / nilfs_palloc_groups_per_desc_block(inode); in nilfs_palloc_desc_blkoff()
114 return desc_block * NILFS_MDT(inode)->mi_blocks_per_desc_block; in nilfs_palloc_desc_blkoff()
126 nilfs_palloc_bitmap_blkoff(const struct inode *inode, unsigned long group) in nilfs_palloc_bitmap_blkoff() argument
129 group % nilfs_palloc_groups_per_desc_block(inode); in nilfs_palloc_bitmap_blkoff()
130 return nilfs_palloc_desc_blkoff(inode, group) + 1 + in nilfs_palloc_bitmap_blkoff()
131 desc_offset * NILFS_MDT(inode)->mi_blocks_per_group; in nilfs_palloc_bitmap_blkoff()
141 nilfs_palloc_group_desc_nfrees(struct inode *inode, unsigned long group, in nilfs_palloc_group_desc_nfrees() argument
146 spin_lock(nilfs_mdt_bgl_lock(inode, group)); in nilfs_palloc_group_desc_nfrees()
148 spin_unlock(nilfs_mdt_bgl_lock(inode, group)); in nilfs_palloc_group_desc_nfrees()
160 nilfs_palloc_group_desc_add_entries(struct inode *inode, in nilfs_palloc_group_desc_add_entries() argument
165 spin_lock(nilfs_mdt_bgl_lock(inode, group)); in nilfs_palloc_group_desc_add_entries()
167 spin_unlock(nilfs_mdt_bgl_lock(inode, group)); in nilfs_palloc_group_desc_add_entries()
176 nilfs_palloc_entry_blkoff(const struct inode *inode, __u64 nr) in nilfs_palloc_entry_blkoff() argument
180 group = nilfs_palloc_group(inode, nr, &group_offset); in nilfs_palloc_entry_blkoff()
182 return nilfs_palloc_bitmap_blkoff(inode, group) + 1 + in nilfs_palloc_entry_blkoff()
183 group_offset / NILFS_MDT(inode)->mi_entries_per_block; in nilfs_palloc_entry_blkoff()
192 static void nilfs_palloc_desc_block_init(struct inode *inode, in nilfs_palloc_desc_block_init() argument
196 unsigned long n = nilfs_palloc_groups_per_desc_block(inode); in nilfs_palloc_desc_block_init()
199 nfrees = cpu_to_le32(nilfs_palloc_entries_per_group(inode)); in nilfs_palloc_desc_block_init()
206 static int nilfs_palloc_get_block(struct inode *inode, unsigned long blkoff, in nilfs_palloc_get_block() argument
208 void (*init_block)(struct inode *, in nilfs_palloc_get_block() argument
226 ret = nilfs_mdt_get_block(inode, blkoff, create, init_block, bhp); in nilfs_palloc_get_block()
249 static int nilfs_palloc_get_desc_block(struct inode *inode, in nilfs_palloc_get_desc_block() argument
253 struct nilfs_palloc_cache *cache = NILFS_MDT(inode)->mi_palloc_cache; in nilfs_palloc_get_desc_block()
255 return nilfs_palloc_get_block(inode, in nilfs_palloc_get_desc_block()
256 nilfs_palloc_desc_blkoff(inode, group), in nilfs_palloc_get_desc_block()
268 static int nilfs_palloc_get_bitmap_block(struct inode *inode, in nilfs_palloc_get_bitmap_block() argument
272 struct nilfs_palloc_cache *cache = NILFS_MDT(inode)->mi_palloc_cache; in nilfs_palloc_get_bitmap_block()
274 return nilfs_palloc_get_block(inode, in nilfs_palloc_get_bitmap_block()
275 nilfs_palloc_bitmap_blkoff(inode, group), in nilfs_palloc_get_bitmap_block()
287 int nilfs_palloc_get_entry_block(struct inode *inode, __u64 nr, in nilfs_palloc_get_entry_block() argument
290 struct nilfs_palloc_cache *cache = NILFS_MDT(inode)->mi_palloc_cache; in nilfs_palloc_get_entry_block()
292 return nilfs_palloc_get_block(inode, in nilfs_palloc_get_entry_block()
293 nilfs_palloc_entry_blkoff(inode, nr), in nilfs_palloc_get_entry_block()
306 nilfs_palloc_block_get_group_desc(const struct inode *inode, in nilfs_palloc_block_get_group_desc() argument
311 group % nilfs_palloc_groups_per_desc_block(inode); in nilfs_palloc_block_get_group_desc()
321 void *nilfs_palloc_block_get_entry(const struct inode *inode, __u64 nr, in nilfs_palloc_block_get_entry() argument
326 nilfs_palloc_group(inode, nr, &group_offset); in nilfs_palloc_block_get_entry()
327 entry_offset = group_offset % NILFS_MDT(inode)->mi_entries_per_block; in nilfs_palloc_block_get_entry()
330 entry_offset * NILFS_MDT(inode)->mi_entry_size; in nilfs_palloc_block_get_entry()
341 static int nilfs_palloc_find_available_slot(struct inode *inode, in nilfs_palloc_find_available_slot() argument
356 nilfs_mdt_bgl_lock(inode, group), pos, bitmap)) in nilfs_palloc_find_available_slot()
375 nilfs_mdt_bgl_lock(inode, group), pos, in nilfs_palloc_find_available_slot()
391 nilfs_palloc_rest_groups_in_desc_block(const struct inode *inode, in nilfs_palloc_rest_groups_in_desc_block() argument
395 nilfs_palloc_groups_per_desc_block(inode) - in nilfs_palloc_rest_groups_in_desc_block()
396 curr % nilfs_palloc_groups_per_desc_block(inode), in nilfs_palloc_rest_groups_in_desc_block()
405 static int nilfs_palloc_count_desc_blocks(struct inode *inode, in nilfs_palloc_count_desc_blocks() argument
411 ret = nilfs_bmap_last_key(NILFS_I(inode)->i_bmap, &blknum); in nilfs_palloc_count_desc_blocks()
415 NILFS_MDT(inode)->mi_blocks_per_desc_block); in nilfs_palloc_count_desc_blocks()
425 static inline bool nilfs_palloc_mdt_file_can_grow(struct inode *inode, in nilfs_palloc_mdt_file_can_grow() argument
428 return (nilfs_palloc_groups_per_desc_block(inode) * desc_blocks) < in nilfs_palloc_mdt_file_can_grow()
429 nilfs_palloc_groups_count(inode); in nilfs_palloc_mdt_file_can_grow()
439 int nilfs_palloc_count_max_entries(struct inode *inode, u64 nused, u64 *nmaxp) in nilfs_palloc_count_max_entries() argument
445 err = nilfs_palloc_count_desc_blocks(inode, &desc_blocks); in nilfs_palloc_count_max_entries()
449 entries_per_desc_block = (u64)nilfs_palloc_entries_per_group(inode) * in nilfs_palloc_count_max_entries()
450 nilfs_palloc_groups_per_desc_block(inode); in nilfs_palloc_count_max_entries()
454 nilfs_palloc_mdt_file_can_grow(inode, desc_blocks)) in nilfs_palloc_count_max_entries()
469 int nilfs_palloc_prepare_alloc_entry(struct inode *inode, in nilfs_palloc_prepare_alloc_entry() argument
482 ngroups = nilfs_palloc_groups_count(inode); in nilfs_palloc_prepare_alloc_entry()
484 group = nilfs_palloc_group(inode, req->pr_entry_nr, &group_offset); in nilfs_palloc_prepare_alloc_entry()
485 entries_per_group = nilfs_palloc_entries_per_group(inode); in nilfs_palloc_prepare_alloc_entry()
486 groups_per_desc_block = nilfs_palloc_groups_per_desc_block(inode); in nilfs_palloc_prepare_alloc_entry()
492 maxgroup = nilfs_palloc_group(inode, req->pr_entry_nr, in nilfs_palloc_prepare_alloc_entry()
495 ret = nilfs_palloc_get_desc_block(inode, group, 1, &desc_bh); in nilfs_palloc_prepare_alloc_entry()
500 inode, group, desc_bh, desc_kaddr); in nilfs_palloc_prepare_alloc_entry()
501 n = nilfs_palloc_rest_groups_in_desc_block(inode, group, in nilfs_palloc_prepare_alloc_entry()
504 if (nilfs_palloc_group_desc_nfrees(inode, group, desc) in nilfs_palloc_prepare_alloc_entry()
507 inode, group, 1, &bitmap_bh); in nilfs_palloc_prepare_alloc_entry()
513 inode, group, group_offset, bitmap, in nilfs_palloc_prepare_alloc_entry()
518 inode, group, desc, -1); in nilfs_palloc_prepare_alloc_entry()
553 void nilfs_palloc_commit_alloc_entry(struct inode *inode, in nilfs_palloc_commit_alloc_entry() argument
558 nilfs_mdt_mark_dirty(inode); in nilfs_palloc_commit_alloc_entry()
569 void nilfs_palloc_commit_free_entry(struct inode *inode, in nilfs_palloc_commit_free_entry() argument
577 group = nilfs_palloc_group(inode, req->pr_entry_nr, &group_offset); in nilfs_palloc_commit_free_entry()
579 desc = nilfs_palloc_block_get_group_desc(inode, group, in nilfs_palloc_commit_free_entry()
584 if (!nilfs_clear_bit_atomic(nilfs_mdt_bgl_lock(inode, group), in nilfs_palloc_commit_free_entry()
589 nilfs_palloc_group_desc_add_entries(inode, group, desc, 1); in nilfs_palloc_commit_free_entry()
596 nilfs_mdt_mark_dirty(inode); in nilfs_palloc_commit_free_entry()
607 void nilfs_palloc_abort_alloc_entry(struct inode *inode, in nilfs_palloc_abort_alloc_entry() argument
615 group = nilfs_palloc_group(inode, req->pr_entry_nr, &group_offset); in nilfs_palloc_abort_alloc_entry()
617 desc = nilfs_palloc_block_get_group_desc(inode, group, in nilfs_palloc_abort_alloc_entry()
621 if (!nilfs_clear_bit_atomic(nilfs_mdt_bgl_lock(inode, group), in nilfs_palloc_abort_alloc_entry()
626 nilfs_palloc_group_desc_add_entries(inode, group, desc, 1); in nilfs_palloc_abort_alloc_entry()
644 int nilfs_palloc_prepare_free_entry(struct inode *inode, in nilfs_palloc_prepare_free_entry() argument
651 group = nilfs_palloc_group(inode, req->pr_entry_nr, &group_offset); in nilfs_palloc_prepare_free_entry()
652 ret = nilfs_palloc_get_desc_block(inode, group, 1, &desc_bh); in nilfs_palloc_prepare_free_entry()
655 ret = nilfs_palloc_get_bitmap_block(inode, group, 1, &bitmap_bh); in nilfs_palloc_prepare_free_entry()
671 void nilfs_palloc_abort_free_entry(struct inode *inode, in nilfs_palloc_abort_free_entry() argument
689 nilfs_palloc_group_is_in(struct inode *inode, unsigned long group, __u64 nr) in nilfs_palloc_group_is_in() argument
693 first = group * nilfs_palloc_entries_per_group(inode); in nilfs_palloc_group_is_in()
694 last = first + nilfs_palloc_entries_per_group(inode) - 1; in nilfs_palloc_group_is_in()
704 int nilfs_palloc_freev(struct inode *inode, __u64 *entry_nrs, size_t nitems) in nilfs_palloc_freev() argument
714 group = nilfs_palloc_group(inode, entry_nrs[i], &group_offset); in nilfs_palloc_freev()
715 ret = nilfs_palloc_get_desc_block(inode, group, 0, &desc_bh); in nilfs_palloc_freev()
718 ret = nilfs_palloc_get_bitmap_block(inode, group, 0, in nilfs_palloc_freev()
726 inode, group, desc_bh, desc_kaddr); in nilfs_palloc_freev()
730 (j < nitems) && nilfs_palloc_group_is_in(inode, group, in nilfs_palloc_freev()
733 nilfs_palloc_group(inode, entry_nrs[j], &group_offset); in nilfs_palloc_freev()
735 nilfs_mdt_bgl_lock(inode, group), in nilfs_palloc_freev()
745 nilfs_palloc_group_desc_add_entries(inode, group, desc, n); in nilfs_palloc_freev()
752 nilfs_mdt_mark_dirty(inode); in nilfs_palloc_freev()
760 void nilfs_palloc_setup_cache(struct inode *inode, in nilfs_palloc_setup_cache() argument
763 NILFS_MDT(inode)->mi_palloc_cache = cache; in nilfs_palloc_setup_cache()
767 void nilfs_palloc_clear_cache(struct inode *inode) in nilfs_palloc_clear_cache() argument
769 struct nilfs_palloc_cache *cache = NILFS_MDT(inode)->mi_palloc_cache; in nilfs_palloc_clear_cache()
781 void nilfs_palloc_destroy_cache(struct inode *inode) in nilfs_palloc_destroy_cache() argument
783 nilfs_palloc_clear_cache(inode); in nilfs_palloc_destroy_cache()
784 NILFS_MDT(inode)->mi_palloc_cache = NULL; in nilfs_palloc_destroy_cache()