📄 xfs_buf.h
字号:
/* Pinning Buffer Storage in Memory */extern void pagebuf_pin( /* pin buffer in memory */ xfs_buf_t *); /* buffer to pin */extern void pagebuf_unpin( /* unpin buffered data */ xfs_buf_t *); /* buffer to unpin */extern int pagebuf_ispin( /* check if buffer is pinned */ xfs_buf_t *); /* buffer to check *//* Delayed Write Buffer Routines */extern void pagebuf_delwri_dequeue(xfs_buf_t *);/* Buffer Daemon Setup Routines */extern int pagebuf_init(void);extern void pagebuf_terminate(void);#ifdef PAGEBUF_TRACEextern ktrace_t *pagebuf_trace_buf;extern void pagebuf_trace( xfs_buf_t *, /* buffer being traced */ char *, /* description of operation */ void *, /* arbitrary diagnostic value */ void *); /* return address */#else# define pagebuf_trace(pb, id, ptr, ra) do { } while (0)#endif#define pagebuf_target_name(target) \ ({ char __b[BDEVNAME_SIZE]; bdevname((target)->pbr_bdev, __b); __b; })/* These are just for xfs_syncsub... it sets an internal variable * then passes it to VOP_FLUSH_PAGES or adds the flags to a newly gotten buf_t */#define XFS_B_ASYNC PBF_ASYNC#define XFS_B_DELWRI PBF_DELWRI#define XFS_B_READ PBF_READ#define XFS_B_WRITE PBF_WRITE#define XFS_B_STALE PBF_STALE#define XFS_BUF_TRYLOCK PBF_TRYLOCK#define XFS_INCORE_TRYLOCK PBF_TRYLOCK#define XFS_BUF_LOCK PBF_LOCK#define XFS_BUF_MAPPED PBF_MAPPED#define BUF_BUSY PBF_DONT_BLOCK#define XFS_BUF_BFLAGS(x) ((x)->pb_flags)#define XFS_BUF_ZEROFLAGS(x) \ ((x)->pb_flags &= ~(PBF_READ|PBF_WRITE|PBF_ASYNC|PBF_DELWRI))#define XFS_BUF_STALE(x) ((x)->pb_flags |= XFS_B_STALE)#define XFS_BUF_UNSTALE(x) ((x)->pb_flags &= ~XFS_B_STALE)#define XFS_BUF_ISSTALE(x) ((x)->pb_flags & XFS_B_STALE)#define XFS_BUF_SUPER_STALE(x) do { \ XFS_BUF_STALE(x); \ pagebuf_delwri_dequeue(x); \ XFS_BUF_DONE(x); \ } while (0)#define XFS_BUF_MANAGE PBF_FS_MANAGED#define XFS_BUF_UNMANAGE(x) ((x)->pb_flags &= ~PBF_FS_MANAGED)#define XFS_BUF_DELAYWRITE(x) ((x)->pb_flags |= PBF_DELWRI)#define XFS_BUF_UNDELAYWRITE(x) pagebuf_delwri_dequeue(x)#define XFS_BUF_ISDELAYWRITE(x) ((x)->pb_flags & PBF_DELWRI)#define XFS_BUF_ERROR(x,no) pagebuf_ioerror(x,no)#define XFS_BUF_GETERROR(x) pagebuf_geterror(x)#define XFS_BUF_ISERROR(x) (pagebuf_geterror(x)?1:0)#define XFS_BUF_DONE(x) ((x)->pb_flags |= PBF_DONE)#define XFS_BUF_UNDONE(x) ((x)->pb_flags &= ~PBF_DONE)#define XFS_BUF_ISDONE(x) ((x)->pb_flags & PBF_DONE)#define XFS_BUF_BUSY(x) do { } while (0)#define XFS_BUF_UNBUSY(x) do { } while (0)#define XFS_BUF_ISBUSY(x) (1)#define XFS_BUF_ASYNC(x) ((x)->pb_flags |= PBF_ASYNC)#define XFS_BUF_UNASYNC(x) ((x)->pb_flags &= ~PBF_ASYNC)#define XFS_BUF_ISASYNC(x) ((x)->pb_flags & PBF_ASYNC)#define XFS_BUF_ORDERED(x) ((x)->pb_flags |= PBF_ORDERED)#define XFS_BUF_UNORDERED(x) ((x)->pb_flags &= ~PBF_ORDERED)#define XFS_BUF_ISORDERED(x) ((x)->pb_flags & PBF_ORDERED)#define XFS_BUF_SHUT(x) printk("XFS_BUF_SHUT not implemented yet\n")#define XFS_BUF_UNSHUT(x) printk("XFS_BUF_UNSHUT not implemented yet\n")#define XFS_BUF_ISSHUT(x) (0)#define XFS_BUF_HOLD(x) pagebuf_hold(x)#define XFS_BUF_READ(x) ((x)->pb_flags |= PBF_READ)#define XFS_BUF_UNREAD(x) ((x)->pb_flags &= ~PBF_READ)#define XFS_BUF_ISREAD(x) ((x)->pb_flags & PBF_READ)#define XFS_BUF_WRITE(x) ((x)->pb_flags |= PBF_WRITE)#define XFS_BUF_UNWRITE(x) ((x)->pb_flags &= ~PBF_WRITE)#define XFS_BUF_ISWRITE(x) ((x)->pb_flags & PBF_WRITE)#define XFS_BUF_ISUNINITIAL(x) (0)#define XFS_BUF_UNUNINITIAL(x) (0)#define XFS_BUF_BP_ISMAPPED(bp) 1#define XFS_BUF_IODONE_FUNC(buf) (buf)->pb_iodone#define XFS_BUF_SET_IODONE_FUNC(buf, func) \ (buf)->pb_iodone = (func)#define XFS_BUF_CLR_IODONE_FUNC(buf) \ (buf)->pb_iodone = NULL#define XFS_BUF_SET_BDSTRAT_FUNC(buf, func) \ (buf)->pb_strat = (func)#define XFS_BUF_CLR_BDSTRAT_FUNC(buf) \ (buf)->pb_strat = NULL#define XFS_BUF_FSPRIVATE(buf, type) \ ((type)(buf)->pb_fspriv)#define XFS_BUF_SET_FSPRIVATE(buf, value) \ (buf)->pb_fspriv = (void *)(value)#define XFS_BUF_FSPRIVATE2(buf, type) \ ((type)(buf)->pb_fspriv2)#define XFS_BUF_SET_FSPRIVATE2(buf, value) \ (buf)->pb_fspriv2 = (void *)(value)#define XFS_BUF_FSPRIVATE3(buf, type) \ ((type)(buf)->pb_fspriv3)#define XFS_BUF_SET_FSPRIVATE3(buf, value) \ (buf)->pb_fspriv3 = (void *)(value)#define XFS_BUF_SET_START(buf)#define XFS_BUF_SET_BRELSE_FUNC(buf, value) \ (buf)->pb_relse = (value)#define XFS_BUF_PTR(bp) (xfs_caddr_t)((bp)->pb_addr)static inline xfs_caddr_t xfs_buf_offset(xfs_buf_t *bp, size_t offset){ if (bp->pb_flags & PBF_MAPPED) return XFS_BUF_PTR(bp) + offset; return (xfs_caddr_t) pagebuf_offset(bp, offset);}#define XFS_BUF_SET_PTR(bp, val, count) \ pagebuf_associate_memory(bp, val, count)#define XFS_BUF_ADDR(bp) ((bp)->pb_bn)#define XFS_BUF_SET_ADDR(bp, blk) \ ((bp)->pb_bn = (xfs_daddr_t)(blk))#define XFS_BUF_OFFSET(bp) ((bp)->pb_file_offset)#define XFS_BUF_SET_OFFSET(bp, off) \ ((bp)->pb_file_offset = (off))#define XFS_BUF_COUNT(bp) ((bp)->pb_count_desired)#define XFS_BUF_SET_COUNT(bp, cnt) \ ((bp)->pb_count_desired = (cnt))#define XFS_BUF_SIZE(bp) ((bp)->pb_buffer_length)#define XFS_BUF_SET_SIZE(bp, cnt) \ ((bp)->pb_buffer_length = (cnt))#define XFS_BUF_SET_VTYPE_REF(bp, type, ref)#define XFS_BUF_SET_VTYPE(bp, type)#define XFS_BUF_SET_REF(bp, ref)#define XFS_BUF_ISPINNED(bp) pagebuf_ispin(bp)#define XFS_BUF_VALUSEMA(bp) pagebuf_lock_value(bp)#define XFS_BUF_CPSEMA(bp) (pagebuf_cond_lock(bp) == 0)#define XFS_BUF_VSEMA(bp) pagebuf_unlock(bp)#define XFS_BUF_PSEMA(bp,x) pagebuf_lock(bp)#define XFS_BUF_V_IODONESEMA(bp) up(&bp->pb_iodonesema);/* setup the buffer target from a buftarg structure */#define XFS_BUF_SET_TARGET(bp, target) \ (bp)->pb_target = (target)#define XFS_BUF_TARGET(bp) ((bp)->pb_target)#define XFS_BUFTARG_NAME(target) \ pagebuf_target_name(target)#define XFS_BUF_SET_VTYPE_REF(bp, type, ref)#define XFS_BUF_SET_VTYPE(bp, type)#define XFS_BUF_SET_REF(bp, ref)static inline int xfs_bawrite(void *mp, xfs_buf_t *bp){ bp->pb_fspriv3 = mp; bp->pb_strat = xfs_bdstrat_cb; pagebuf_delwri_dequeue(bp); return pagebuf_iostart(bp, PBF_WRITE | PBF_ASYNC | _PBF_RUN_QUEUES);}static inline void xfs_buf_relse(xfs_buf_t *bp){ if (!bp->pb_relse) pagebuf_unlock(bp); pagebuf_rele(bp);}#define xfs_bpin(bp) pagebuf_pin(bp)#define xfs_bunpin(bp) pagebuf_unpin(bp)#define xfs_buftrace(id, bp) \ pagebuf_trace(bp, id, NULL, (void *)__builtin_return_address(0))#define xfs_biodone(pb) \ pagebuf_iodone(pb, 0)#define xfs_biomove(pb, off, len, data, rw) \ pagebuf_iomove((pb), (off), (len), (data), \ ((rw) == XFS_B_WRITE) ? PBRW_WRITE : PBRW_READ)#define xfs_biozero(pb, off, len) \ pagebuf_iomove((pb), (off), (len), NULL, PBRW_ZERO)static inline int XFS_bwrite(xfs_buf_t *pb){ int iowait = (pb->pb_flags & PBF_ASYNC) == 0; int error = 0; if (!iowait) pb->pb_flags |= _PBF_RUN_QUEUES; pagebuf_delwri_dequeue(pb); pagebuf_iostrategy(pb); if (iowait) { error = pagebuf_iowait(pb); xfs_buf_relse(pb); } return error;}#define XFS_bdwrite(pb) \ pagebuf_iostart(pb, PBF_DELWRI | PBF_ASYNC)static inline int xfs_bdwrite(void *mp, xfs_buf_t *bp){ bp->pb_strat = xfs_bdstrat_cb; bp->pb_fspriv3 = mp; return pagebuf_iostart(bp, PBF_DELWRI | PBF_ASYNC);}#define XFS_bdstrat(bp) pagebuf_iorequest(bp)#define xfs_iowait(pb) pagebuf_iowait(pb)#define xfs_baread(target, rablkno, ralen) \ pagebuf_readahead((target), (rablkno), (ralen), PBF_DONT_BLOCK)#define xfs_buf_get_empty(len, target) pagebuf_get_empty((len), (target))#define xfs_buf_get_noaddr(len, target) pagebuf_get_no_daddr((len), (target))#define xfs_buf_free(bp) pagebuf_free(bp)/* * Handling of buftargs. */extern xfs_buftarg_t *xfs_alloc_buftarg(struct block_device *, int);extern void xfs_free_buftarg(xfs_buftarg_t *, int);extern void xfs_wait_buftarg(xfs_buftarg_t *);extern int xfs_setsize_buftarg(xfs_buftarg_t *, unsigned int, unsigned int);extern int xfs_flush_buftarg(xfs_buftarg_t *, int);#define xfs_getsize_buftarg(buftarg) \ block_size((buftarg)->pbr_bdev)#define xfs_readonly_buftarg(buftarg) \ bdev_read_only((buftarg)->pbr_bdev)#define xfs_binval(buftarg) \ xfs_flush_buftarg(buftarg, 1)#define XFS_bflush(buftarg) \ xfs_flush_buftarg(buftarg, 1)#endif /* __XFS_BUF_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -