summaryrefslogtreecommitdiffstats
path: root/sys/gnu/fs/xfs/FreeBSD/xfs_buf.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/gnu/fs/xfs/FreeBSD/xfs_buf.h')
-rw-r--r--sys/gnu/fs/xfs/FreeBSD/xfs_buf.h145
1 files changed, 95 insertions, 50 deletions
diff --git a/sys/gnu/fs/xfs/FreeBSD/xfs_buf.h b/sys/gnu/fs/xfs/FreeBSD/xfs_buf.h
index 54a7fc6..c27a14c 100644
--- a/sys/gnu/fs/xfs/FreeBSD/xfs_buf.h
+++ b/sys/gnu/fs/xfs/FreeBSD/xfs_buf.h
@@ -35,30 +35,58 @@
#include <sys/bio.h>
#include <sys/buf.h>
-/* XXX: move this into buf.h */
-#ifndef B_MANAGED
-#define B_MANAGED B_08000000
-#endif
-
struct xfs_buf;
struct xfs_mount;
struct vnode;
+typedef struct buf xfs_buf_t;
+typedef uint32_t xfs_buf_flags_t;
+#define xfs_buf buf
+
+extern struct buf_ops xfs_bo_ops;
+
+typedef enum {
+ XBRW_READ = 1, /* transfer into target memory */
+ XBRW_WRITE = 2, /* transfer from target memory */
+ XBRW_ZERO = 3, /* Zero target memory */
+} xfs_buf_rw_t;
+
+/* Buffer Read and Write Routines */
+extern void xfs_buf_ioend(xfs_buf_t *, int);
+extern void xfs_buf_ioerror(xfs_buf_t *, int);
+extern int xfs_buf_iostart(xfs_buf_t *, xfs_buf_flags_t);
+extern int xfs_buf_iorequest(xfs_buf_t *);
+extern int xfs_buf_iowait(xfs_buf_t *);
+extern void xfs_buf_iomove(xfs_buf_t *, size_t, size_t, xfs_caddr_t, xfs_buf_rw_t);
+
+/* Pinning Buffer Storage in Memory */
+extern void xfs_buf_pin(xfs_buf_t *);
+extern void xfs_buf_unpin(xfs_buf_t *);
+extern int xfs_buf_ispin(xfs_buf_t *);
+
typedef void (*xfs_buf_iodone_t)(struct xfs_buf *); /* call-back function on I/O completion */
typedef void (*xfs_buf_relse_t)(struct xfs_buf *); /* call-back function on I/O completion */
typedef int (*xfs_buf_bdstrat_t)(struct xfs_buf *);
typedef struct xfs_buftarg {
+ /* this probaby redundant info, but stick with linux conventions for now */
+ unsigned int bt_bsize;
+ unsigned int bt_sshift;
+ size_t bt_smask;
struct cdev *dev;
struct vnode *specvp;
} xfs_buftarg_t;
-typedef struct buf xfs_buf_t;
-#define xfs_buf buf
+
+/* Finding and Reading Buffers */
+extern void xfs_buf_readahead(xfs_buftarg_t *, xfs_off_t, size_t, xfs_buf_flags_t);
+/* Misc buffer rountines */
+extern int xfs_readonly_buftarg(xfs_buftarg_t *);
/* 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 XBF_DONT_BLOCK 0
#define XFS_B_ASYNC B_ASYNC
#define XFS_B_DELWRI B_DELWRI
@@ -71,13 +99,15 @@ typedef struct buf xfs_buf_t;
#define XFS_BUF_MAPPED 0
#define BUF_BUSY 0
+#define XBF_ORDERED 0
+
/* debugging routines might need this */
#define XFS_BUF_BFLAGS(x) ((x)->b_flags)
#define XFS_BUF_ZEROFLAGS(x) ((x)->b_flags = 0)
-#define XFS_BUF_STALE(x) ((x)->b_flags |= XFS_B_STALE)
-#define XFS_BUF_UNSTALE(x) ((x)->b_flags &= ~XFS_B_STALE)
-#define XFS_BUF_ISSTALE(x) ((x)->b_flags & XFS_B_STALE)
-#define XFS_BUF_SUPER_STALE(x) {(x)->b_flags |= XFS_B_STALE;\
+#define XFS_BUF_STALE(x) ((x)->b_flags |= (XFS_B_STALE|B_NOCACHE))
+#define XFS_BUF_UNSTALE(x) ((x)->b_flags &= ~(XFS_B_STALE|B_NOCACHE))
+#define XFS_BUF_ISSTALE(x) ((x)->b_flags & (XFS_B_STALE|B_NOCACHE))
+#define XFS_BUF_SUPER_STALE(x) {(x)->b_flags |= (XFS_B_STALE|B_NOCACHE); \
(x)->b_flags &= ~(XFS_B_DELWRI|B_CACHE);}
#define XFS_BUF_MANAGE B_MANAGED
@@ -116,6 +146,10 @@ xfs_buf_get_error(struct buf *bp)
#define XFS_BUF_UNASYNC(x) ((x)->b_flags &= ~B_ASYNC)
#define XFS_BUF_ISASYNC(x) ((x)->b_flags & B_ASYNC)
+#define XFS_BUF_ORDERED(bp) ((bp)->b_flags |= XBF_ORDERED)
+#define XFS_BUF_UNORDERED(bp) ((bp)->b_flags &= ~XBF_ORDERED)
+#define XFS_BUF_ISORDERED(bp) ((bp)->b_flags & XBF_ORDERED)
+
#define XFS_BUF_FLUSH(x) ((x)->b_flags |= B_00800000)
#define XFS_BUF_UNFLUSH(x) ((x)->b_flags &= ~B_00800000)
#define XFS_BUF_ISFLUSH(x) ((x)->b_flags & B_00800000)
@@ -203,8 +237,10 @@ xfs_buf_offset(xfs_buf_t *bp, size_t offset)
#define XFS_BUF_VALUSEMA(bp) (BUF_REFCNT(bp)? 0 : 1)
#define XFS_BUF_CPSEMA(bp) \
(BUF_LOCK(bp, LK_EXCLUSIVE|LK_CANRECURSE | LK_SLEEPFAIL, NULL) == 0)
+
#define XFS_BUF_PSEMA(bp,x) BUF_LOCK(bp, LK_EXCLUSIVE|LK_CANRECURSE, NULL)
#define XFS_BUF_VSEMA(bp) BUF_UNLOCK(bp)
+
#define XFS_BUF_V_IODONESEMA(bp) bdone(bp)
/* setup the buffer target from a buftarg structure */
@@ -222,7 +258,7 @@ xfs_buftarg_t *xfs_buf_get_target(xfs_buf_t *);
#define XFS_BUF_SET_VTYPE(bp, type)
#define XFS_BUF_SET_REF(bp, ref)
-#define XFS_BUF_ISPINNED(bp) xfs_ispin(bp)
+#define XFS_BUF_ISPINNED(bp) xfs_buf_ispin(bp)
xfs_buf_t *
xfs_buf_read_flags(xfs_buftarg_t *, xfs_daddr_t, size_t, int);
@@ -238,16 +274,34 @@ xfs_buf_get_flags(xfs_buftarg_t *, xfs_daddr_t, size_t, int);
xfs_buf_get_flags(target, blkno, len, \
XFS_BUF_LOCK | XFS_BUF_MAPPED)
-#define xfs_bdwrite(mp, bp) bdwrite(bp)
-/*
- { ((bp)->b_vp == NULL) ? (bp)->b_bdstrat = xfs_bdstrat_cb: 0; \
- (bp)->b_fsprivate3 = (mp); bdwrite(bp);}
-*/
-#define xfs_bawrite(mp, bp) bawrite(bp)
-/*
- { ((bp)->b_vp == NULL) ? (bp)->b_bdstrat = xfs_bdstrat_cb: 0; \
- (bp)->b_fsprivate3 = (mp); bawrite(bp);}
-*/
+/* the return value is never used ... why does linux define this functions this way? */
+static inline int xfs_bawrite(void *mp, xfs_buf_t *bp)
+{
+ /* Ditto for xfs_bawrite
+ bp->b_fspriv3 = mp;
+ bp->b_strat = xfs_bdstrat_cb;
+ xfs_buf_delwri_dequeue(bp);
+ return xfs_buf_iostart(bp, XBF_WRITE | XBF_ASYNC | _XBF_RUN_QUEUES);
+ */
+ bawrite(bp);
+ return 0;
+}
+
+static inline int xfs_bdwrite(void *mp, xfs_buf_t *bp)
+{
+ /* this is for io shutdown checking need to do this at some point RMC */
+ /* probably should just change xfs to call a buf write function */
+#if 0 /* RMC */
+ bp->b_strat = xfs_bdstrat_cb;
+ bp->b_fspriv3 = mp;
+ return xfs_buf_iostart(bp, XBF_DELWRI | XBF_ASYNC);
+#endif
+ bdwrite(bp);
+ return 0;
+}
+
+#define xfs_bpin(bp) xfs_buf_pin(bp)
+#define xfs_bunpin(bp) xfs_buf_unpin(bp)
#define xfs_buf_relse(bp) brelse(bp)
#define xfs_bp_mapin(bp) bp_mapin(bp)
@@ -258,32 +312,21 @@ xfs_buf_get_flags(xfs_buftarg_t *, xfs_daddr_t, size_t, int);
#define xfs_incore(xfs_buftarg,blkno,len,lockit) \
incore(&xfs_buftarg->specvp->v_bufobj, blkno);
-#define xfs_biomove(pb, off, len, data, rw) \
- panic("%s:%d: xfs_biomove NI", __FILE__, __LINE__)
+#define xfs_biomove(bp, off, len, data, rw) \
+ xfs_buf_iomove((bp), (off), (len), (data), \
+ ((rw) == XFS_B_WRITE) ? XBRW_WRITE : XBRW_READ)
-#define xfs_biozero(pb, off, len) \
- panic("%s:%d: xfs_biozero NI", __FILE__, __LINE__)
+#define xfs_biozero(bp, off, len) \
+ xfs_buf_iomove((bp), (off), (len), NULL, XBRW_ZERO)
/* already a function xfs_bwrite... fix this */
-#define XFS_bdwrite(bp) bdwrite(bp)
-#define xfs_iowait(bp) bufwait(bp)
-
-#define xfs_binval(buftarg) printf("binval(buftarg.dev) NI\n")
-#define XFS_bflush(buftarg) printf("bflush(buftarg.dev) NI\n")
-
-#define XFS_bdstrat(bp) printf("XFS_bdstrat NI\n")
-
-#define xfs_incore_relse(buftarg,delwri_only,wait) \
- printf("incore_relse(buftarg.dev,delwri_only,wait) NI\n")
-
-#define xfs_incore_match(buftarg,blkno,len,field,value) \
- printf("incore_match(buftarg.dev,blkno,len,field,value) NI \n")
+#define XFS_bdwrite(bp) bdwrite(bp)
+#define xfs_iowait(bp) bufwait(bp)
-void xfs_baread(xfs_buftarg_t *targp, xfs_daddr_t ioff, size_t isize);
+#define XFS_bdstrat(bp) xfs_buf_iorequest(bp)
-extern void pdflush(struct vnode *, uint64_t);
-#define XFS_pdflush(vnode,flags) \
- pdflush(vnode,flags)
+#define xfs_baread(target, rablkno, ralen) \
+ xfs_buf_readahead((target), (rablkno), (ralen), XBF_DONT_BLOCK)
struct xfs_mount;
@@ -291,14 +334,16 @@ int XFS_bwrite(xfs_buf_t *bp);
xfs_buf_t* xfs_buf_get_empty(size_t, xfs_buftarg_t *targ);
xfs_buf_t* xfs_buf_get_noaddr(size_t, xfs_buftarg_t *targ);
void xfs_buf_free(xfs_buf_t *);
-int xfs_buf_iorequest(struct xfs_buf *bp);
-void XFS_freerbuf(xfs_buf_t *bp);
-void XFS_nfreerbuf(xfs_buf_t *bp);
+extern void xfs_bwait_unpin(xfs_buf_t *bp);
+extern xfs_buftarg_t *xfs_alloc_buftarg(struct vnode *, 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 unsigned int xfs_getsize_buftarg(struct xfs_buftarg *);
+extern int xfs_flush_buftarg(xfs_buftarg_t *, int);
-void xfs_bpin(xfs_buf_t *bp);
-void xfs_bunpin(xfs_buf_t *bp);
-int xfs_ispin(xfs_buf_t *bp);
-void xfs_bwait_unpin(xfs_buf_t *bp);
+#define xfs_binval(buftarg) xfs_flush_buftarg(buftarg, 1)
+#define XFS_bflush(buftarg) xfs_flush_buftarg(buftarg, 1)
#endif
OpenPOWER on IntegriCloud