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

sufile.h (4339B)


      1/* SPDX-License-Identifier: GPL-2.0+ */
      2/*
      3 * NILFS segment usage file.
      4 *
      5 * Copyright (C) 2006-2008 Nippon Telegraph and Telephone Corporation.
      6 *
      7 * Written by Koji Sato.
      8 */
      9
     10#ifndef _NILFS_SUFILE_H
     11#define _NILFS_SUFILE_H
     12
     13#include <linux/fs.h>
     14#include <linux/buffer_head.h>
     15#include "mdt.h"
     16
     17
     18static inline unsigned long nilfs_sufile_get_nsegments(struct inode *sufile)
     19{
     20	return ((struct the_nilfs *)sufile->i_sb->s_fs_info)->ns_nsegments;
     21}
     22
     23unsigned long nilfs_sufile_get_ncleansegs(struct inode *sufile);
     24
     25int nilfs_sufile_set_alloc_range(struct inode *sufile, __u64 start, __u64 end);
     26int nilfs_sufile_alloc(struct inode *, __u64 *);
     27int nilfs_sufile_mark_dirty(struct inode *sufile, __u64 segnum);
     28int nilfs_sufile_set_segment_usage(struct inode *sufile, __u64 segnum,
     29				   unsigned long nblocks, time64_t modtime);
     30int nilfs_sufile_get_stat(struct inode *, struct nilfs_sustat *);
     31ssize_t nilfs_sufile_get_suinfo(struct inode *, __u64, void *, unsigned int,
     32				size_t);
     33ssize_t nilfs_sufile_set_suinfo(struct inode *, void *, unsigned int, size_t);
     34
     35int nilfs_sufile_updatev(struct inode *, __u64 *, size_t, int, size_t *,
     36			 void (*dofunc)(struct inode *, __u64,
     37					struct buffer_head *,
     38					struct buffer_head *));
     39int nilfs_sufile_update(struct inode *, __u64, int,
     40			void (*dofunc)(struct inode *, __u64,
     41				       struct buffer_head *,
     42				       struct buffer_head *));
     43void nilfs_sufile_do_scrap(struct inode *, __u64, struct buffer_head *,
     44			   struct buffer_head *);
     45void nilfs_sufile_do_free(struct inode *, __u64, struct buffer_head *,
     46			  struct buffer_head *);
     47void nilfs_sufile_do_cancel_free(struct inode *, __u64, struct buffer_head *,
     48				 struct buffer_head *);
     49void nilfs_sufile_do_set_error(struct inode *, __u64, struct buffer_head *,
     50			       struct buffer_head *);
     51
     52int nilfs_sufile_resize(struct inode *sufile, __u64 newnsegs);
     53int nilfs_sufile_read(struct super_block *sb, size_t susize,
     54		      struct nilfs_inode *raw_inode, struct inode **inodep);
     55int nilfs_sufile_trim_fs(struct inode *sufile, struct fstrim_range *range);
     56
     57/**
     58 * nilfs_sufile_scrap - make a segment garbage
     59 * @sufile: inode of segment usage file
     60 * @segnum: segment number to be freed
     61 */
     62static inline int nilfs_sufile_scrap(struct inode *sufile, __u64 segnum)
     63{
     64	return nilfs_sufile_update(sufile, segnum, 1, nilfs_sufile_do_scrap);
     65}
     66
     67/**
     68 * nilfs_sufile_free - free segment
     69 * @sufile: inode of segment usage file
     70 * @segnum: segment number to be freed
     71 */
     72static inline int nilfs_sufile_free(struct inode *sufile, __u64 segnum)
     73{
     74	return nilfs_sufile_update(sufile, segnum, 0, nilfs_sufile_do_free);
     75}
     76
     77/**
     78 * nilfs_sufile_freev - free segments
     79 * @sufile: inode of segment usage file
     80 * @segnumv: array of segment numbers
     81 * @nsegs: size of @segnumv array
     82 * @ndone: place to store the number of freed segments
     83 */
     84static inline int nilfs_sufile_freev(struct inode *sufile, __u64 *segnumv,
     85				     size_t nsegs, size_t *ndone)
     86{
     87	return nilfs_sufile_updatev(sufile, segnumv, nsegs, 0, ndone,
     88				    nilfs_sufile_do_free);
     89}
     90
     91/**
     92 * nilfs_sufile_cancel_freev - reallocate freeing segments
     93 * @sufile: inode of segment usage file
     94 * @segnumv: array of segment numbers
     95 * @nsegs: size of @segnumv array
     96 * @ndone: place to store the number of cancelled segments
     97 *
     98 * Return Value: On success, 0 is returned. On error, a negative error codes
     99 * is returned.
    100 */
    101static inline int nilfs_sufile_cancel_freev(struct inode *sufile,
    102					    __u64 *segnumv, size_t nsegs,
    103					    size_t *ndone)
    104{
    105	return nilfs_sufile_updatev(sufile, segnumv, nsegs, 0, ndone,
    106				    nilfs_sufile_do_cancel_free);
    107}
    108
    109/**
    110 * nilfs_sufile_set_error - mark a segment as erroneous
    111 * @sufile: inode of segment usage file
    112 * @segnum: segment number
    113 *
    114 * Description: nilfs_sufile_set_error() marks the segment specified by
    115 * @segnum as erroneous. The error segment will never be used again.
    116 *
    117 * Return Value: On success, 0 is returned. On error, one of the following
    118 * negative error codes is returned.
    119 *
    120 * %-EIO - I/O error.
    121 *
    122 * %-ENOMEM - Insufficient amount of memory available.
    123 *
    124 * %-EINVAL - Invalid segment usage number.
    125 */
    126static inline int nilfs_sufile_set_error(struct inode *sufile, __u64 segnum)
    127{
    128	return nilfs_sufile_update(sufile, segnum, 0,
    129				   nilfs_sufile_do_set_error);
    130}
    131
    132#endif	/* _NILFS_SUFILE_H */