📄 xfs_mount.h
字号:
struct super_block *m_super; xfs_tid_t m_tid; /* next unused tid for fs */ AIL_LOCK_T m_ail_lock; /* fs AIL mutex */ xfs_ail_entry_t m_ail; /* fs active log item list */ uint m_ail_gen; /* fs AIL generation count */ xfs_sb_t m_sb; /* copy of fs superblock */ lock_t m_sb_lock; /* sb counter mutex */ struct xfs_buf *m_sb_bp; /* buffer for superblock */ char *m_fsname; /* filesystem name */ int m_fsname_len; /* strlen of fs name */ char *m_rtname; /* realtime device name */ char *m_logname; /* external log device name */ int m_bsize; /* fs logical block size */ xfs_agnumber_t m_agfrotor; /* last ag where space found */ xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */ lock_t m_agirotor_lock;/* .. and lock protecting it */ xfs_agnumber_t m_maxagi; /* highest inode alloc group */ struct xfs_inode *m_inodes; /* active inode list */ struct list_head m_del_inodes; /* inodes to reclaim */ mutex_t m_ilock; /* inode list mutex */ uint m_ireclaims; /* count of calls to reclaim*/ uint m_readio_log; /* min read size log bytes */ uint m_readio_blocks; /* min read size blocks */ uint m_writeio_log; /* min write size log bytes */ uint m_writeio_blocks; /* min write size blocks */ struct log *m_log; /* log specific stuff */ int m_logbufs; /* number of log buffers */ int m_logbsize; /* size of each log buffer */ uint m_rsumlevels; /* rt summary levels */ uint m_rsumsize; /* size of rt summary, bytes */ struct xfs_inode *m_rbmip; /* pointer to bitmap inode */ struct xfs_inode *m_rsumip; /* pointer to summary inode */ struct xfs_inode *m_rootip; /* pointer to root directory */ struct xfs_quotainfo *m_quotainfo; /* disk quota information */ xfs_buftarg_t *m_ddev_targp; /* saves taking the address */ xfs_buftarg_t *m_logdev_targp;/* ptr to log device */ xfs_buftarg_t *m_rtdev_targp; /* ptr to rt device */ __uint8_t m_dircook_elog; /* log d-cookie entry bits */ __uint8_t m_blkbit_log; /* blocklog + NBBY */ __uint8_t m_blkbb_log; /* blocklog - BBSHIFT */ __uint8_t m_agno_log; /* log #ag's */ __uint8_t m_agino_log; /* #bits for agino in inum */ __uint16_t m_inode_cluster_size;/* min inode buf size */ uint m_blockmask; /* sb_blocksize-1 */ uint m_blockwsize; /* sb_blocksize in words */ uint m_blockwmask; /* blockwsize-1 */ uint m_alloc_mxr[2]; /* XFS_ALLOC_BLOCK_MAXRECS */ uint m_alloc_mnr[2]; /* XFS_ALLOC_BLOCK_MINRECS */ uint m_bmap_dmxr[2]; /* XFS_BMAP_BLOCK_DMAXRECS */ uint m_bmap_dmnr[2]; /* XFS_BMAP_BLOCK_DMINRECS */ uint m_inobt_mxr[2]; /* XFS_INOBT_BLOCK_MAXRECS */ uint m_inobt_mnr[2]; /* XFS_INOBT_BLOCK_MINRECS */ uint m_ag_maxlevels; /* XFS_AG_MAXLEVELS */ uint m_bm_maxlevels[2]; /* XFS_BM_MAXLEVELS */ uint m_in_maxlevels; /* XFS_IN_MAXLEVELS */ struct xfs_perag *m_perag; /* per-ag accounting info */ struct rw_semaphore m_peraglock; /* lock for m_perag (pointer) */ struct mutex m_growlock; /* growfs mutex */ int m_fixedfsid[2]; /* unchanged for life of FS */ uint m_dmevmask; /* DMI events for this FS */ __uint64_t m_flags; /* global mount flags */ uint m_attroffset; /* inode attribute offset */ uint m_dir_node_ents; /* #entries in a dir danode */ uint m_attr_node_ents; /* #entries in attr danode */ int m_ialloc_inos; /* inodes in inode allocation */ int m_ialloc_blks; /* blocks in inode allocation */ int m_litino; /* size of inode union area */ int m_inoalign_mask;/* mask sb_inoalignmt if used */ uint m_qflags; /* quota status flags */ xfs_trans_reservations_t m_reservations;/* precomputed res values */ __uint64_t m_maxicount; /* maximum inode count */ __uint64_t m_maxioffset; /* maximum inode offset */ __uint64_t m_resblks; /* total reserved blocks */ __uint64_t m_resblks_avail;/* available reserved blocks */#if XFS_BIG_INUMS xfs_ino_t m_inoadd; /* add value for ino64_offset */#endif int m_dalign; /* stripe unit */ int m_swidth; /* stripe width */ int m_sinoalign; /* stripe unit inode alignment */ int m_attr_magicpct;/* 37% of the blocksize */ int m_dir_magicpct; /* 37% of the dir blocksize */ __uint8_t m_mk_sharedro; /* mark shared ro on unmount */ __uint8_t m_inode_quiesce;/* call quiesce on new inodes. field governed by m_ilock */ __uint8_t m_sectbb_log; /* sectlog - BBSHIFT */ int m_dirblksize; /* directory block sz--bytes */ int m_dirblkfsbs; /* directory block sz--fsbs */ xfs_dablk_t m_dirdatablk; /* blockno of dir data v2 */ xfs_dablk_t m_dirleafblk; /* blockno of dir non-data v2 */ xfs_dablk_t m_dirfreeblk; /* blockno of dirfreeindex v2 */ uint m_chsize; /* size of next field */ struct xfs_chash *m_chash; /* fs private inode per-cluster * hash table */ struct xfs_dmops *m_dm_ops; /* vector of DMI ops */ struct xfs_qmops *m_qm_ops; /* vector of XQM ops */ struct xfs_ioops m_io_ops; /* vector of I/O ops */ atomic_t m_active_trans; /* number trans frozen */#ifdef HAVE_PERCPU_SB xfs_icsb_cnts_t *m_sb_cnts; /* per-cpu superblock counters */ unsigned long m_icsb_counters; /* disabled per-cpu counters */ struct notifier_block m_icsb_notifier; /* hotplug cpu notifier */ struct mutex m_icsb_mutex; /* balancer sync lock */#endif struct xfs_mru_cache *m_filestream; /* per-mount filestream data */ struct task_struct *m_sync_task; /* generalised sync thread */ bhv_vfs_sync_work_t m_sync_work; /* work item for VFS_SYNC */ struct list_head m_sync_list; /* sync thread work item list */ spinlock_t m_sync_lock; /* work item list lock */ int m_sync_seq; /* sync thread generation no. */ wait_queue_head_t m_wait_single_sync_task;} xfs_mount_t;/* * Flags for m_flags. */#define XFS_MOUNT_WSYNC (1ULL << 0) /* for nfs - all metadata ops must be synchronous except for space allocations */#define XFS_MOUNT_INO64 (1ULL << 1)#define XFS_MOUNT_DMAPI (1ULL << 2) /* dmapi is enabled */#define XFS_MOUNT_WAS_CLEAN (1ULL << 3)#define XFS_MOUNT_FS_SHUTDOWN (1ULL << 4) /* atomic stop of all filesystem operations, typically for disk errors in metadata */#define XFS_MOUNT_RETERR (1ULL << 6) /* return alignment errors to user */#define XFS_MOUNT_NOALIGN (1ULL << 7) /* turn off stripe alignment allocations */#define XFS_MOUNT_ATTR2 (1ULL << 8) /* allow use of attr2 format */#define XFS_MOUNT_GRPID (1ULL << 9) /* group-ID assigned from directory */#define XFS_MOUNT_NORECOVERY (1ULL << 10) /* no recovery - dirty fs */#define XFS_MOUNT_SHARED (1ULL << 11) /* shared mount */#define XFS_MOUNT_DFLT_IOSIZE (1ULL << 12) /* set default i/o size */#define XFS_MOUNT_OSYNCISOSYNC (1ULL << 13) /* o_sync is REALLY o_sync */ /* osyncisdsync is now default*/#define XFS_MOUNT_32BITINODES (1ULL << 14) /* do not create inodes above * 32 bits in size */#define XFS_MOUNT_SMALL_INUMS (1ULL << 15) /* users wants 32bit inodes */#define XFS_MOUNT_NOUUID (1ULL << 16) /* ignore uuid during mount */#define XFS_MOUNT_BARRIER (1ULL << 17)#define XFS_MOUNT_IDELETE (1ULL << 18) /* delete empty inode clusters*/#define XFS_MOUNT_SWALLOC (1ULL << 19) /* turn on stripe width * allocation */#define XFS_MOUNT_RDONLY (1ULL << 20) /* read-only fs */#define XFS_MOUNT_DIRSYNC (1ULL << 21) /* synchronous directory ops */#define XFS_MOUNT_COMPAT_IOSIZE (1ULL << 22) /* don't report large preferred * I/O size in stat() */#define XFS_MOUNT_NO_PERCPU_SB (1ULL << 23) /* don't use per-cpu superblock counters */#define XFS_MOUNT_FILESTREAMS (1ULL << 24) /* enable the filestreams allocator *//* * Default minimum read and write sizes. */#define XFS_READIO_LOG_LARGE 16#define XFS_WRITEIO_LOG_LARGE 16/* * Max and min values for mount-option defined I/O * preallocation sizes. */#define XFS_MAX_IO_LOG 30 /* 1G */#define XFS_MIN_IO_LOG PAGE_SHIFT/* * Synchronous read and write sizes. This should be * better for NFSv2 wsync filesystems. */#define XFS_WSYNC_READIO_LOG 15 /* 32K */#define XFS_WSYNC_WRITEIO_LOG 14 /* 16K *//* * Allow large block sizes to be reported to userspace programs if the * "largeio" mount option is used. * * If compatibility mode is specified, simply return the basic unit of caching * so that we don't get inefficient read/modify/write I/O from user apps. * Otherwise.... * * If the underlying volume is a stripe, then return the stripe width in bytes * as the recommended I/O size. It is not a stripe and we've set a default * buffered I/O size, return that, otherwise return the compat default. */static inline unsigned longxfs_preferred_iosize(xfs_mount_t *mp){ if (mp->m_flags & XFS_MOUNT_COMPAT_IOSIZE) return PAGE_CACHE_SIZE; return (mp->m_swidth ? (mp->m_swidth << mp->m_sb.sb_blocklog) : ((mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) ? (1 << (int)MAX(mp->m_readio_log, mp->m_writeio_log)) : PAGE_CACHE_SIZE));}#define XFS_MAXIOFFSET(mp) ((mp)->m_maxioffset)#define XFS_LAST_UNMOUNT_WAS_CLEAN(mp) \ ((mp)->m_flags & XFS_MOUNT_WAS_CLEAN)#define XFS_FORCED_SHUTDOWN(mp) ((mp)->m_flags & XFS_MOUNT_FS_SHUTDOWN)void xfs_do_force_shutdown(struct xfs_mount *mp, int flags, char *fname, int lnnum);#define xfs_force_shutdown(m,f) \ xfs_do_force_shutdown(m, f, __FILE__, __LINE__)/* * Flags for xfs_mountfs */#define XFS_MFSI_SECOND 0x01 /* Secondary mount -- skip stuff */#define XFS_MFSI_CLIENT 0x02 /* Is a client -- skip lots of stuff *//* XFS_MFSI_RRINODES */#define XFS_MFSI_NOUNLINK 0x08 /* Skip unlinked inode processing in */ /* log recovery */#define XFS_MFSI_NO_QUOTACHECK 0x10 /* Skip quotacheck processing *//* XFS_MFSI_CONVERT_SUNIT */#define XFS_MFSI_QUIET 0x40 /* Be silent if mount errors found */#define XFS_DADDR_TO_AGNO(mp,d) xfs_daddr_to_agno(mp,d)static inline xfs_agnumber_txfs_daddr_to_agno(struct xfs_mount *mp, xfs_daddr_t d){ xfs_daddr_t ld = XFS_BB_TO_FSBT(mp, d); do_div(ld, mp->m_sb.sb_agblocks); return (xfs_agnumber_t) ld;}#define XFS_DADDR_TO_AGBNO(mp,d) xfs_daddr_to_agbno(mp,d)static inline xfs_agblock_txfs_daddr_to_agbno(struct xfs_mount *mp, xfs_daddr_t d){ xfs_daddr_t ld = XFS_BB_TO_FSBT(mp, d); return (xfs_agblock_t) do_div(ld, mp->m_sb.sb_agblocks);}/* * perag get/put wrappers for eventual ref counting */static inline xfs_perag_t *xfs_get_perag(struct xfs_mount *mp, xfs_ino_t ino){ return &mp->m_perag[XFS_INO_TO_AGNO(mp, ino)];}static inline voidxfs_put_perag(struct xfs_mount *mp, xfs_perag_t *pag){ /* nothing to see here, move along */}/* * Per-cpu superblock locking functions */#ifdef HAVE_PERCPU_SBSTATIC_INLINE voidxfs_icsb_lock(xfs_mount_t *mp){ mutex_lock(&mp->m_icsb_mutex);}STATIC_INLINE voidxfs_icsb_unlock(xfs_mount_t *mp){ mutex_unlock(&mp->m_icsb_mutex);}#else#define xfs_icsb_lock(mp)#define xfs_icsb_unlock(mp)#endif/* * This structure is for use by the xfs_mod_incore_sb_batch() routine. * xfs_growfs can specify a few fields which are more than int limit */typedef struct xfs_mod_sb { xfs_sb_field_t msb_field; /* Field to modify, see below */ int64_t msb_delta; /* Change to make to specified field */} xfs_mod_sb_t;#define XFS_MOUNT_ILOCK(mp) mutex_lock(&((mp)->m_ilock))#define XFS_MOUNT_IUNLOCK(mp) mutex_unlock(&((mp)->m_ilock))#define XFS_SB_LOCK(mp) mutex_spinlock(&(mp)->m_sb_lock)#define XFS_SB_UNLOCK(mp,s) mutex_spinunlock(&(mp)->m_sb_lock,(s))extern xfs_mount_t *xfs_mount_init(void);extern void xfs_mod_sb(xfs_trans_t *, __int64_t);extern int xfs_log_sbcount(xfs_mount_t *, uint);extern void xfs_mount_free(xfs_mount_t *mp);extern int xfs_mountfs(xfs_mount_t *mp, int);extern void xfs_mountfs_check_barriers(xfs_mount_t *mp);extern int xfs_unmountfs(xfs_mount_t *, struct cred *);extern void xfs_unmountfs_close(xfs_mount_t *, struct cred *);extern int xfs_unmountfs_writesb(xfs_mount_t *);extern int xfs_unmount_flush(xfs_mount_t *, int);extern int xfs_mod_incore_sb(xfs_mount_t *, xfs_sb_field_t, int64_t, int);extern int xfs_mod_incore_sb_unlocked(xfs_mount_t *, xfs_sb_field_t, int64_t, int);extern int xfs_mod_incore_sb_batch(xfs_mount_t *, xfs_mod_sb_t *, uint, int);extern struct xfs_buf *xfs_getsb(xfs_mount_t *, int);extern int xfs_readsb(xfs_mount_t *, int);extern void xfs_freesb(xfs_mount_t *);extern int xfs_fs_writable(xfs_mount_t *);extern int xfs_syncsub(xfs_mount_t *, int, int *);extern int xfs_sync_inodes(xfs_mount_t *, int, int *);extern xfs_agnumber_t xfs_initialize_perag(xfs_mount_t *, xfs_agnumber_t);extern void xfs_sb_from_disk(struct xfs_sb *, struct xfs_dsb *);extern void xfs_sb_to_disk(struct xfs_dsb *, struct xfs_sb *, __int64_t);extern int xfs_sb_validate_fsb_count(struct xfs_sb *, __uint64_t);extern int xfs_dmops_get(struct xfs_mount *, struct xfs_mount_args *);extern void xfs_dmops_put(struct xfs_mount *);extern int xfs_qmops_get(struct xfs_mount *, struct xfs_mount_args *);extern void xfs_qmops_put(struct xfs_mount *);extern struct xfs_dmops xfs_dmcore_xfs;extern struct xfs_ioops xfs_iocore_xfs;extern int xfs_init(void);extern void xfs_cleanup(void);#endif /* __KERNEL__ */#endif /* __XFS_MOUNT_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -