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