VFS之超级块结构

    xiaoxiao2021-03-26  15

    文件系统元信息,即超级块对象。 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 */ };

     

     
    转载请注明原文地址: https://ju.6miu.com/read-600215.html

    最新回复(0)