xiaoxiao2021-03-26  13

    对文件的抽象,即inode索引节点描述: /* * Keep mostly read-only and often accessed (especially for  * the RCU path lookup and 'stat' data) fields at the beginning  * of the 'struct inode'  */ struct inode {     umode_t            i_mode;     unsigned short        i_opflags;     kuid_t            i_uid;     kgid_t            i_gid;     unsigned int        i_flags; #ifdef CONFIG_FS_POSIX_ACL     struct posix_acl    *i_acl;     struct posix_acl    *i_default_acl; #endif     const struct inode_operations    *i_op;     struct super_block    *i_sb;     struct address_space    *i_mapping; #ifdef CONFIG_SECURITY     void            *i_security; #endif     /* Stat data, not accessed from path walking */     unsigned long        i_ino;     /*      * Filesystems may only read i_nlink directly.  They shall use the      * following functions for modification:      *      *    (set|clear|inc|drop)_nlink      *    inode_(inc|dec)_link_count      */     union {         const unsigned int i_nlink;         unsigned int __i_nlink;     };     dev_t            i_rdev;     loff_t            i_size;//对应的文件或者块大小     struct timespec64    i_atime;     struct timespec64    i_mtime;     struct timespec64    i_ctime;     spinlock_t        i_lock;    /* i_blocks, i_bytes, maybe i_size */     unsigned short          i_bytes;     u8            i_blkbits;     u8            i_write_hint;     blkcnt_t        i_blocks; #ifdef __NEED_I_SIZE_ORDERED     seqcount_t        i_size_seqcount; #endif     /* Misc */     unsigned long        i_state;     struct rw_semaphore    i_rwsem;     unsigned long        dirtied_when;    /* jiffies of first dirtying */     unsigned long        dirtied_time_when;     struct hlist_node    i_hash;     struct list_head    i_io_list;    /* backing dev IO list  具体的会被回写的链表*/      #ifdef CONFIG_CGROUP_WRITEBACK     struct bdi_writeback    *i_wb;        /* the associated cgroup wb */     /* foreign inode detection, see wbc_detach_inode() */     int            i_wb_frn_winner;     u16            i_wb_frn_avg_time;     u16            i_wb_frn_history; #endif     struct list_head    i_lru;        /* inode LRU list */     struct list_head    i_sb_list;     struct list_head    i_wb_list;    /* backing dev writeback list */          union {         struct hlist_head    i_dentry;         struct rcu_head        i_rcu;     };     atomic64_t        i_version;     atomic_t        i_count;     atomic_t        i_dio_count;     atomic_t        i_writecount; #ifdef CONFIG_IMA     atomic_t        i_readcount; /* struct files open RO */ #endif     const struct file_operations    *i_fop;    /* former ->i_op->default_file_ops */     struct file_lock_context    *i_flctx;     struct address_space    i_data;     struct list_head    i_devices;     union {         struct pipe_inode_info    *i_pipe;         struct block_device    *i_bdev;         struct cdev        *i_cdev;         char            *i_link;         unsigned        i_dir_seq;     };     __u32            i_generation; #ifdef CONFIG_FSNOTIFY     __u32            i_fsnotify_mask; /* all events this inode cares about */     struct fsnotify_mark_connector __rcu    *i_fsnotify_marks; #endif #ifdef CONFIG_FS_ENCRYPTION     struct fscrypt_info    *i_crypt_info; #endif     void            *i_private; /* fs or device private pointer */ } ;
    转载请注明原文地址: https://ju.6miu.com/read-600052.html