1 /* Prototypes for -lminixfs. */ 2 3 #ifndef _MINIX_FSLIB_H 4 #define _MINIX_FSLIB_H 5 6 #include <minix/fsdriver.h> 7 8 /* Maximum number of blocks that will be considered by lmfs_prefetch() */ 9 #define LMFS_MAX_PREFETCH NR_IOREQS 10 11 struct buf { 12 /* Data portion of the buffer. */ 13 void *data; 14 15 /* Header portion of the buffer - internal to libminixfs. */ 16 struct buf *lmfs_next; /* used to link all free bufs in a chain */ 17 struct buf *lmfs_prev; /* used to link all free bufs the other way */ 18 struct buf *lmfs_hash; /* used to link bufs on hash chains */ 19 dev_t lmfs_dev; /* major | minor device where block resides */ 20 block64_t lmfs_blocknr; /* block number of its (minor) device */ 21 char lmfs_count; /* number of users of this buffer */ 22 char lmfs_needsetcache; /* to be identified to VM */ 23 size_t lmfs_bytes; /* size of this block (allocated and used) */ 24 u32_t lmfs_flags; /* Flags shared between VM and FS */ 25 26 /* If any, which inode & offset does this block correspond to? 27 * If none, VMC_NO_INODE 28 */ 29 ino_t lmfs_inode; 30 u64_t lmfs_inode_offset; 31 }; 32 33 void lmfs_markdirty(struct buf *bp); 34 void lmfs_markclean(struct buf *bp); 35 int lmfs_isclean(struct buf *bp); 36 void lmfs_flushall(void); 37 void lmfs_flushdev(dev_t dev); 38 size_t lmfs_fs_block_size(void); 39 void lmfs_may_use_vmcache(int); 40 void lmfs_set_blocksize(size_t blocksize); 41 void lmfs_buf_pool(int new_nr_bufs); 42 int lmfs_get_block(struct buf **bpp, dev_t dev, block64_t block, int how); 43 int lmfs_get_block_ino(struct buf **bpp, dev_t dev, block64_t block, int how, 44 ino_t ino, u64_t off); 45 void lmfs_put_block(struct buf *bp); 46 void lmfs_free_block(dev_t dev, block64_t block); 47 void lmfs_zero_block_ino(dev_t dev, ino_t ino, u64_t off); 48 void lmfs_invalidate(dev_t device); 49 void lmfs_prefetch(dev_t dev, const block64_t *blockset, unsigned int nblocks); 50 void lmfs_setquiet(int q); 51 void lmfs_set_blockusage(fsblkcnt_t btotal, fsblkcnt_t bused); 52 void lmfs_change_blockusage(int delta); 53 54 /* get_block arguments */ 55 #define NORMAL 0 /* forces get_block to do disk read */ 56 #define NO_READ 1 /* prevents get_block from doing disk read */ 57 #define PEEK 2 /* returns ENOENT if not in cache */ 58 59 /* Block I/O helper functions. */ 60 void lmfs_driver(dev_t dev, char *label); 61 ssize_t lmfs_bio(dev_t dev, struct fsdriver_data *data, size_t bytes, 62 off_t pos, int call); 63 void lmfs_bflush(dev_t dev); 64 65 #endif /* _MINIX_FSLIB_H */ 66