cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

alloc.h (3232B)


      1/* SPDX-License-Identifier: GPL-2.0+ */
      2/*
      3 * Persistent object (dat entry/disk inode) allocator/deallocator
      4 *
      5 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
      6 *
      7 * Originally written by Koji Sato.
      8 * Two allocators were unified by Ryusuke Konishi and Amagai Yoshiji.
      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
     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 */
     25static inline unsigned long
     26nilfs_palloc_entries_per_group(const struct inode *inode)
     27{
     28	return 1UL << (inode->i_blkbits + 3 /* log2(8 = CHAR_BITS) */);
     29}
     30
     31int nilfs_palloc_init_blockgroup(struct inode *, unsigned int);
     32int nilfs_palloc_get_entry_block(struct inode *, __u64, int,
     33				 struct buffer_head **);
     34void *nilfs_palloc_block_get_entry(const struct inode *, __u64,
     35				   const struct buffer_head *, void *);
     36
     37int nilfs_palloc_count_max_entries(struct inode *, u64, u64 *);
     38
     39/**
     40 * nilfs_palloc_req - persistent allocator request and reply
     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 */
     46struct 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
     53int nilfs_palloc_prepare_alloc_entry(struct inode *,
     54				     struct nilfs_palloc_req *);
     55void nilfs_palloc_commit_alloc_entry(struct inode *,
     56				     struct nilfs_palloc_req *);
     57void nilfs_palloc_abort_alloc_entry(struct inode *, struct nilfs_palloc_req *);
     58void nilfs_palloc_commit_free_entry(struct inode *, struct nilfs_palloc_req *);
     59int nilfs_palloc_prepare_free_entry(struct inode *, struct nilfs_palloc_req *);
     60void nilfs_palloc_abort_free_entry(struct inode *, struct nilfs_palloc_req *);
     61int 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
     65#define nilfs_find_next_zero_bit	find_next_zero_bit_le
     66#define nilfs_find_next_bit		find_next_bit_le
     67
     68/**
     69 * struct nilfs_bh_assoc - block offset and buffer head association
     70 * @blkoff: block offset
     71 * @bh: buffer head
     72 */
     73struct nilfs_bh_assoc {
     74	unsigned long blkoff;
     75	struct buffer_head *bh;
     76};
     77
     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 */
     85struct 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
     92void nilfs_palloc_setup_cache(struct inode *inode,
     93			      struct nilfs_palloc_cache *cache);
     94void nilfs_palloc_clear_cache(struct inode *inode);
     95void nilfs_palloc_destroy_cache(struct inode *inode);
     96
     97#endif	/* _NILFS_ALLOC_H */