文件系统元信息,即超级块对象。

struct super_block {
    struct list_head    s_list;        /* Keep this first */
    dev_t                s_dev;        /* search index; _not_ kdev_t */
    unsigned char                    s_blocksize_bits;
    unsigned long                    s_blocksize;
    loff_t                            s_maxbytes;        /* Max file size */
    struct file_system_type            *s_type;
    const struct super_operations    *s_op;
    const struct dquot_operations    *dq_op;
    const struct quotactl_ops        *s_qcop;
    const struct export_operations     *s_export_op;
    unsigned long        s_flags;
    unsigned long        s_iflags;    /* internal SB_I_* flags */
    unsigned long        s_magic;
    struct dentry        *s_root;
    
    struct rw_semaphore    s_umount;
    
    int                    s_count;
    atomic_t            s_active;
#ifdef CONFIG_SECURITY
    void                        *s_security;
#endif
    const struct xattr_handler     **s_xattr;
#ifdef CONFIG_FS_ENCRYPTION
    const struct fscrypt_operations    *s_cop;
#endif    struct hlist_bl_head    s_roots;    /* alternate root dentries for NFS */
    struct list_head        s_mounts;    /* list of mounts; _not_ for fs use */
    struct block_device        *s_bdev;
    struct backing_dev_info *s_bdi;
    struct mtd_info            *s_mtd;
    struct hlist_node        s_instances;
    unsigned int            s_quota_types;    /* Bitmask of supported quota types */
    struct quota_info        s_dquot;    /* Diskquota specific options */
    struct sb_writers        s_writers;
    /*
     * Keep s_fs_info, s_time_gran, s_fsnotify_mask, and
     * s_fsnotify_marks together for cache efficiency. They are frequently
     * accessed and rarely modified.
     */
    void                    *s_fs_info;    /* Filesystem private info */
    /* Granularity of c/m/atime in ns (cannot be worse than a second) */
    u32            s_time_gran;
#ifdef CONFIG_FSNOTIFY
    __u32            s_fsnotify_mask;
    struct fsnotify_mark_connector __rcu    *s_fsnotify_marks;
#endif
    char                s_id[32];    /* Informational name */
    uuid_t                s_uuid;        /* UUID */
    unsigned int        s_max_links;
    fmode_t                s_mode;
    /*
     * The next field is for VFS *only*. No filesystems have any business
     * even looking at it. You had been warned.
     */
    struct mutex s_vfs_rename_mutex;    /* Kludge */
    /*
     * Filesystem subtype.  If non-empty the filesystem type field
     * in /proc/mounts will be "type.subtype"
     */
    const char *s_subtype;
    const struct dentry_operations *s_d_op; /* default d_op for dentries */
    /*
     * Saved pool identifier for cleancache (-1 means none)
     */
    int cleancache_poolid;
    struct shrinker s_shrink;    /* per-sb shrinker handle */
    /* Number of inodes with nlink == 0 but still referenced */
    atomic_long_t s_remove_count;
    /* Pending fsnotify inode refs */
    atomic_long_t s_fsnotify_inode_refs;
    /* Being remounted read-only */
    int s_readonly_remount;
    /* AIO completions deferred from interrupt context */
    struct workqueue_struct *s_dio_done_wq;
    struct hlist_head s_pins;
    /*
     * Owning user namespace and default context in which to
     * interpret filesystem uids, gids, quotas, device nodes,
     * xattrs and security labels.
     */
    struct user_namespace *s_user_ns;
    /*
     * The list_lru structure is essentially just a pointer to a table
     * of per-node lru lists, each of which has its own spinlock.
     * There is no need to put them into separate cachelines.
     */
    struct list_lru        s_dentry_lru;
    struct list_lru        s_inode_lru;
    struct rcu_head        rcu;
    struct work_struct    destroy_work;
    struct mutex        s_sync_lock;    /* sync serialisation lock */
    /*
     * Indicates how deep in a filesystem stack this SB is
     */
    int s_stack_depth;
    /* s_inode_list_lock protects s_inodes */
    spinlock_t            s_inode_list_lock;
    struct list_head    s_inodes;        /* all inodes */
    spinlock_t            s_inode_wblist_lock;
    struct list_head    s_inodes_wb;    /* writeback inodes */
};