xref: /OK3568_Linux_fs/kernel/fs/bfs/bfs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *	fs/bfs/bfs.h
4*4882a593Smuzhiyun  *	Copyright (C) 1999-2018 Tigran Aivazian <aivazian.tigran@gmail.com>
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #ifndef _FS_BFS_BFS_H
7*4882a593Smuzhiyun #define _FS_BFS_BFS_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/bfs_fs.h>
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /* In theory BFS supports up to 512 inodes, numbered from 2 (for /) up to 513 inclusive.
12*4882a593Smuzhiyun    In actual fact, attempting to create the 512th inode (i.e. inode No. 513 or file No. 511)
13*4882a593Smuzhiyun    will fail with ENOSPC in bfs_add_entry(): the root directory cannot contain so many entries, counting '..'.
14*4882a593Smuzhiyun    So, mkfs.bfs(8) should really limit its -N option to 511 and not 512. For now, we just print a warning
15*4882a593Smuzhiyun    if a filesystem is mounted with such "impossible to fill up" number of inodes */
16*4882a593Smuzhiyun #define BFS_MAX_LASTI	513
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun /*
19*4882a593Smuzhiyun  * BFS file system in-core superblock info
20*4882a593Smuzhiyun  */
21*4882a593Smuzhiyun struct bfs_sb_info {
22*4882a593Smuzhiyun 	unsigned long si_blocks;
23*4882a593Smuzhiyun 	unsigned long si_freeb;
24*4882a593Smuzhiyun 	unsigned long si_freei;
25*4882a593Smuzhiyun 	unsigned long si_lf_eblk;
26*4882a593Smuzhiyun 	unsigned long si_lasti;
27*4882a593Smuzhiyun 	DECLARE_BITMAP(si_imap, BFS_MAX_LASTI+1);
28*4882a593Smuzhiyun 	struct mutex bfs_lock;
29*4882a593Smuzhiyun };
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /*
32*4882a593Smuzhiyun  * BFS file system in-core inode info
33*4882a593Smuzhiyun  */
34*4882a593Smuzhiyun struct bfs_inode_info {
35*4882a593Smuzhiyun 	unsigned long i_dsk_ino; /* inode number from the disk, can be 0 */
36*4882a593Smuzhiyun 	unsigned long i_sblock;
37*4882a593Smuzhiyun 	unsigned long i_eblock;
38*4882a593Smuzhiyun 	struct inode vfs_inode;
39*4882a593Smuzhiyun };
40*4882a593Smuzhiyun 
BFS_SB(struct super_block * sb)41*4882a593Smuzhiyun static inline struct bfs_sb_info *BFS_SB(struct super_block *sb)
42*4882a593Smuzhiyun {
43*4882a593Smuzhiyun 	return sb->s_fs_info;
44*4882a593Smuzhiyun }
45*4882a593Smuzhiyun 
BFS_I(struct inode * inode)46*4882a593Smuzhiyun static inline struct bfs_inode_info *BFS_I(struct inode *inode)
47*4882a593Smuzhiyun {
48*4882a593Smuzhiyun 	return container_of(inode, struct bfs_inode_info, vfs_inode);
49*4882a593Smuzhiyun }
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun #define printf(format, args...) \
53*4882a593Smuzhiyun 	printk(KERN_ERR "BFS-fs: %s(): " format, __func__, ## args)
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun /* inode.c */
56*4882a593Smuzhiyun extern struct inode *bfs_iget(struct super_block *sb, unsigned long ino);
57*4882a593Smuzhiyun extern void bfs_dump_imap(const char *, struct super_block *);
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun /* file.c */
60*4882a593Smuzhiyun extern const struct inode_operations bfs_file_inops;
61*4882a593Smuzhiyun extern const struct file_operations bfs_file_operations;
62*4882a593Smuzhiyun extern const struct address_space_operations bfs_aops;
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun /* dir.c */
65*4882a593Smuzhiyun extern const struct inode_operations bfs_dir_inops;
66*4882a593Smuzhiyun extern const struct file_operations bfs_dir_operations;
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #endif /* _FS_BFS_BFS_H */
69