NBLKDEV was 16 for every disk and partition together, which a laptop's NVMe drive with its eight partitions and a USB stick come close to. The mount table held 8, SchFS 4 volumes and 4 snapshots, FAT 4 volumes. Now 32, 32, 16, 8 and 8; the device numbers still fit between the ones already fixed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S1giNvrHTrPMPw7V6x1kQ4
30 lines
1.4 KiB
C
30 lines
1.4 KiB
C
#pragma once
|
|
|
|
// FAT12, FAT16 and FAT32, with VFAT long names: the filesystem every other
|
|
// operating system can read, which is the whole reason to have it. A USB
|
|
// stick, an EFI system partition, an SD card. See kernel/fs/fat/fat.c.
|
|
//
|
|
// Mounted the way Linux mounts it -- `mount -t vfat /dev/usb0p1 /mnt` -- and
|
|
// "msdos" and "fat" are accepted as the same thing.
|
|
|
|
// Filesystem device numbers for mounted FAT volumes. Like SCHFS_DEV, runtime
|
|
// identities for the inode cache that nothing on disk records.
|
|
#define FAT_VOL_SLOTS 8 // 104..111
|
|
#define FAT_DEV 104
|
|
#define FAT_IS_DEV(d) ((d) >= FAT_DEV && (d) < FAT_DEV + FAT_VOL_SLOTS)
|
|
|
|
// The root directory's inode number on every FAT volume.
|
|
#define FAT_ROOT_INO 1
|
|
|
|
// Mount the FAT volume on block device `bdev`. Returns its filesystem device
|
|
// number, or a negative errno: -ENODEV for no FAT there, -EBUSY for no free
|
|
// slot or already mounted.
|
|
int fat_kmount(uint bdev, int readonly);
|
|
// Flush it, mark it cleanly unmounted, and let it go.
|
|
int fat_kumount(uint dev);
|
|
int fat_readonly(uint dev);
|
|
// Write out everything dirty on every mounted volume. `final` also marks each
|
|
// one clean, for a shutdown that will not get to unmount them.
|
|
void fat_ksync_all(int final);
|
|
// Cluster size, clusters and free clusters, for statfs. -1 if not FAT.
|
|
int fat_kstatfs(uint dev, uint64 *bsize, uint64 *total, uint64 *freec);
|