ext4文件系统中super_block、ext4_super_block、ext4_sb_info

本文详细介绍了ext4文件系统中super_block、ext4_super_block和ext4_sb_info之间的关系。超级块作为文件系统的核心,存储了整个文件系统的关键信息。在ext4中,这些信息分别在不同结构体中体现,并通过特定方式相互关联,如EXT4_SB宏可以从super_block获取ext4_sb_info,而ext4_super_block则通过s_es字段在ext4_sb_info中被引用。理解这些结构体的交互对于深入掌握ext4文件系统至关重要。
摘要由CSDN通过智能技术生成

超级块代表了整个文件系统,超级块是文件系统的控制块,有整个文件系统信息,一个文件系统所有的inode都要连接到超级块上,可以说,一个超级块就代表了一个文件系统。

各种文件系统都必须实现超级快对象,该对象用于存储特定文件系统的信息,通常对应于存放在磁盘特定扇区中的文件系统超级块或文件系统控制块。对于ext4文件系统,它的超级块信息与结构体super_block、ext4_super_block、ext4_sb_info相关。下面就对这些结构体之间的关系进行梳理。

super_block定义在include/linux/fs.h中:

struct super_block {
    struct list_head    s_list;        /* Keep this first */
    dev_t            s_dev;        /* search index; _not_ kdev_t */
    unsigned char        s_dirt;
    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_magic;
    struct dentry        *s_root;
    struct rw_semaphore    s_umount;
    struct mutex        s_lock;
    int            s_count;
    atomic_t        s_active;
#ifdef CONFIG_SECURITY
    void                    *s_security;
#endif
    const struct xattr_handler **s_xattr;

    struct list_head    s_inodes;    /* all inodes */
    struct hlist_bl_head    s_anon;        /* anonymous dentries for (nfs) exporting */
#ifdef CONFIG_SMP
    struct list_head __percpu *s_files;
#else
    struct list_head    s_files;
#endif
    struct list_head    s_mounts;    /* list of mounts; _not_ for fs use */
    /* s_dentry_lru, s_nr_dentry_unused protected by dcache.c lru locks */
    struct list_head    s_dentry_lru;    /* unused dentry lru */
    int            s_nr_dentry_unused;    /* # of dentry on lru */

    /* s_inode_lru_lock protects s_inode_lru and s_nr_inodes_unused */
    spinlock_t        s_inode_lru_lock ____cacheline_aligned_in_smp;
    struct list_head    s_inode_lru;        /* unused inode lru */
    int            s_nr_inodes_unused;    /* # of inodes on lru */

    struct block_device    *s_bdev;
    struct backing_dev_info *s_bdi;
    struct mtd_info        *s_mtd;
    struct hlist_node    s_instances;
    struct quota_info    s_dquot;    /* Diskquota specific options */

    int            s_frozen;
    wait_queue_head_t    s_wait_unfrozen;

    char s_id[32];                /* Informational name */
    u8 s_uuid[16];                /* UUID */

    void             *s_fs_info;    /* Filesystem private info */
    unsigned int        s_max_links;
    fmode_t            s_mode;

    /* Granularity of c/m/atime in ns.
       Cannot be worse than a second */
    u32           s_time_gran;

    /*
     * 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"
     */
    char *s_subtype;

    /*
     * Saved mount options for lazy filesystems using
     * generic_show_options()
     */
    char __rcu *s_options;
    const struct dentry_operations *s_d_op; /* default d_op for dentries */

    /*
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值