Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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