+/*!
+ @function buf_bread
+ @abstract Synchronously read a block of a file.
+ @discussion buf_bread() is the traditional way to read a single logical block of a file through the buffer cache.
+ It tries to find the buffer and corresponding page(s) in core, calls VNOP_STRATEGY if necessary to bring the data
+ into memory, and waits for I/O to complete. It should not be used to read blocks of greater than 4K (one VM page)
+ in size; use cluster routines for large reads. Indeed, the cluster layer is a more efficient choice for reading DATA
+ unless you need some finely-tuned semantics that it cannot provide.
+ @param vp The file from which to read.
+ @param blkno The logical (filesystem) block number to read.
+ @param size Size of block; do not use for sizes > 4K.
+ @param cred Credential to store and use for reading from disk if data are not already in core.
+ @param bpp Destination pointer for buffer.
+ @return 0 for success, or an error from buf_biowait().
+ */
+errno_t buf_bread(vnode_t, daddr64_t, int, kauth_cred_t, buf_t *);
+
+/*!
+ @function buf_breadn
+ @abstract Read a block from a file with read-ahead.
+ @discussion buf_breadn() reads one block synchronously in the style of buf_bread() and fires
+ off a specified set of asynchronous reads to improve the likelihood of future cache hits.
+ It should not be used to read blocks of greater than 4K (one VM page) in size; use cluster
+ routines for large reads. Indeed, the cluster layer is a more efficient choice for reading DATA
+ unless you need some finely-tuned semantics that it cannot provide.
+ @param vp The file from which to read.
+ @param blkno The logical (filesystem) block number to read synchronously.
+ @param size Size of block; do not use for sizes > 4K.
+ @param rablks Array of logical block numbers for asynchronous read-aheads.
+ @param rasizes Array of block sizes for asynchronous read-aheads, each index corresponding to same index in "rablks."
+ @param nrablks Number of entries in read-ahead arrays.
+ @param cred Credential to store and use for reading from disk if data are not already in core.
+ @param bpp Destination pointer for buffer.
+ @return 0 for success, or an error from buf_biowait().
+ */
+errno_t buf_breadn(vnode_t, daddr64_t, int, daddr64_t *, int *, int, kauth_cred_t, buf_t *);
+
+/*!
+ @function buf_meta_bread
+ @abstract Synchronously read a metadata block of a file.
+ @discussion buf_meta_bread() is the traditional way to read a single logical block of a file through the buffer cache.
+ It tries to find the buffer and corresponding page(s) in core, calls VNOP_STRATEGY if necessary to bring the data
+ into memory, and waits for I/O to complete. It should not be used to read blocks of greater than 4K (one VM page)
+ in size; use cluster routines for large reads. Reading meta-data through the traditional buffer cache, unlike
+ reading data, is efficient and encouraged, especially if the blocks being read are significantly smaller than page size.
+ @param vp The file from which to read.
+ @param blkno The logical (filesystem) block number to read.
+ @param size Size of block; do not use for sizes > 4K.
+ @param cred Credential to store and use for reading from disk if data are not already in core.
+ @param bpp Destination pointer for buffer.
+ @return 0 for success, or an error from buf_biowait().
+ */
+errno_t buf_meta_bread(vnode_t, daddr64_t, int, kauth_cred_t, buf_t *);
+
+/*!
+ @function buf_meta_breadn
+ @abstract Read a metadata block from a file with read-ahead.
+ @discussion buf_meta_breadn() reads one block synchronously in the style of buf_meta_bread() and fires
+ off a specified set of asynchronous reads to improve the likelihood of future cache hits.
+ It should not be used to read blocks of greater than 4K (one VM page) in size; use cluster
+ routines for large reads.
+ @param vp The file from which to read.
+ @param blkno The logical (filesystem) block number to read synchronously.
+ @param size Size of block; do not use for sizes > 4K.
+ @param rablks Array of logical block numbers for asynchronous read-aheads.
+ @param rasizes Array of block sizes for asynchronous read-aheads, each index corresponding to same index in "rablks."
+ @param nrablks Number of entries in read-ahead arrays.
+ @param cred Credential to store and use for reading from disk if data are not already in core.
+ @param bpp Destination pointer for buffer.
+ @return 0 for success, or an error from buf_biowait().
+ */
+errno_t buf_meta_breadn(vnode_t, daddr64_t, int, daddr64_t *, int *, int, kauth_cred_t, buf_t *);
+
+/*!
+ @function minphys
+ @abstract Adjust a buffer's count to be no more than maximum physical I/O transfer size for the host architecture.
+ @discussion physio() takes as a parameter a function to bound transfer sizes for each VNOP_STRATEGY() call. minphys()
+ is a default implementation. It calls buf_setcount() to make the buffer's count the min() of its current count
+ and the max I/O size for the host architecture.
+ @param bp The buffer whose byte count to modify.
+ @return New byte count.
+ */