ファイルシステムの抽象化をしたオブジェクトが super_block です。
より正確に言うとファイルシステムに関するグローバル情報を保持しています。
全部ではないですがメンバーオブジェクト・メンバー変数はヘッダーから以下のように確認できます。
// /usr/src/linux-headers-4.18.16-041816-generic/include/linux/fs.h
1348 struct super_block {
1349 struct list_head s_list; /* Keep this first */
1350 dev_t s_dev; /* search index; _not_ kdev_t */
1351 unsigned char s_blocksize_bits;
1352 unsigned long s_blocksize;
1353 loff_t s_maxbytes; /* Max file size */
1354 struct file_system_type *s_type;
1355 const struct super_operations *s_op;
1356 const struct dquot_operations *dq_op;
1357 const struct quotactl_ops *s_qcop;
1358 const struct export_operations *s_export_op;
1359 unsigned long s_flags;
1360 unsigned long s_iflags; /* internal SB_I_* flags */
1361 unsigned long s_magic;
1362 struct dentry *s_root;
1363 struct rw_semaphore s_umount;
1364 int s_count;
1365 atomic_t s_active;
1366 #ifdef CONFIG_SECURITY
1367 void *s_security;
1368 #endif
1369 const struct xattr_handler **s_xattr;
1370 #if IS_ENABLED(CONFIG_FS_ENCRYPTION)
1371 const struct fscrypt_operations *s_cop;
1372 #endif
1373 struct hlist_bl_head s_roots; /* alternate root dentries for NFS */
1374 struct list_head s_mounts; /* list of mounts; _not_ for fs use */
1375 struct block_device *s_bdev;
1376 struct backing_dev_info *s_bdi;
1377 struct mtd_info *s_mtd;
1378 struct hlist_node s_instances;
1379 unsigned int s_quota_types; /* Bitmask of supported quota types */
1380 struct quota_info s_dquot; /* Diskquota specific options */
1381
1382 struct sb_writers s_writers;
1383
1384 char s_id[32]; /* Informational name */
1385 uuid_t s_uuid; /* UUID */
1386
1387 void *s_fs_info; /* Filesystem private info */
1388 unsigned int s_max_links;
1389 fmode_t s_mode;蛇足ですがメンバーとして宣言されている super_operations は関数ポインターを宣言しています。
// /usr/src/linux-headers-4.18.16-041816-generic/include/linux/fs.h
1824 struct super_operations {
1825 struct inode *(*alloc_inode)(struct super_block *sb);
1826 void (*destroy_inode)(struct inode *);
1827
1828 void (*dirty_inode) (struct inode *, int flags);
1829 int (*write_inode) (struct inode *, struct writeback_control *wbc);
1830 int (*drop_inode) (struct inode *);
1831 void (*evict_inode) (struct inode *);
1832 void (*put_super) (struct super_block *);
1833 int (*sync_fs)(struct super_block *sb, int wait);
1834 int (*freeze_super) (struct super_block *);
1835 int (*freeze_fs) (struct super_block *);
1836 int (*thaw_super) (struct super_block *);
1837 int (*unfreeze_fs) (struct super_block *);
1838 int (*statfs) (struct dentry *, struct kstatfs *);
1839 int (*remount_fs) (struct super_block *, int *, char *);
1840 void (*umount_begin) (struct super_block *);
1841
1842 int (*show_options)(struct seq_file *, struct dentry *);
1843 int (*show_devname)(struct seq_file *, struct dentry *);
1844 int (*show_path)(struct seq_file *, struct dentry *);
1845 int (*show_stats)(struct seq_file *, struct dentry *);
1846 #ifdef CONFIG_QUOTA
1847 ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
1848 ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, l
1849 struct dquot **(*get_dquots)(struct inode *);
1850 #endif
1851 int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
1852 long (*nr_cached_objects)(struct super_block *,
1853 struct shrink_control *);
1854 long (*free_cached_objects)(struct super_block *,
1855 struct shrink_control *);
1856 };この中で重要なのは inode 系の関数です。
覚えておくと良さそうのは alloc_inode / destroy_inode / dirty_inode / write_inode / put_super / sync_fs / statfs あたりでしょうかね。
Copyright 2018-2019, by Masaki Komatsu