- LIST_ENTRY(buf) b_hash; /* Hash chain. */
- LIST_ENTRY(buf) b_vnbufs; /* Buffer's associated vnode. */
- TAILQ_ENTRY(buf) b_freelist; /* Free list position if not active. */
- int b_timestamp; /* timestamp for queuing operation */
- int b_whichq; /* the free list the buffer belongs to */
- volatile uint32_t b_flags; /* B_* flags. */
- volatile uint32_t b_lflags; /* BL_BUSY | BL_WANTED flags... protected by buf_mtx */
- int b_error; /* errno value. */
- int b_bufsize; /* Allocated buffer size. */
- int b_bcount; /* Valid bytes in buffer. */
- int b_resid; /* Remaining I/O. */
- dev_t b_dev; /* Device associated with buffer. */
- uintptr_t b_datap; /* Memory, superblocks, indirect etc.*/
- daddr64_t b_lblkno; /* Logical block number. */
- daddr64_t b_blkno; /* Underlying physical block number. */
- void (*b_iodone)(buf_t, void *); /* Function to call upon completion. */
- vnode_t b_vp; /* File vnode for data, device vnode for metadata. */
- kauth_cred_t b_rcred; /* Read credentials reference. */
- kauth_cred_t b_wcred; /* Write credentials reference. */
- void * b_upl; /* Pointer to UPL */
- buf_t b_real_bp; /* used to track bp generated through cluster_bp */
- TAILQ_ENTRY(buf) b_act; /* Device driver queue when active */
- void * b_drvdata; /* Device driver private use */
- void * b_fsprivate; /* filesystem private use */
- void * b_transaction; /* journal private use */
- int b_dirtyoff; /* Offset in buffer of dirty region. */
- int b_dirtyend; /* Offset of end of dirty region. */
- int b_validoff; /* Offset in buffer of valid region. */
- int b_validend; /* Offset of end of valid region. */
+ LIST_ENTRY(buf) b_hash; /* Hash chain. */
+ LIST_ENTRY(buf) b_vnbufs; /* Buffer's associated vnode. */
+ TAILQ_ENTRY(buf) b_freelist; /* Free list position if not active. */
+ int b_timestamp; /* timestamp for queuing operation */
+ struct timeval b_timestamp_tv; /* microuptime for disk conditioner */
+ int b_whichq; /* the free list the buffer belongs to */
+ volatile uint32_t b_flags; /* B_* flags. */
+ volatile uint32_t b_lflags; /* BL_BUSY | BL_WANTED flags... protected by buf_mtx */
+ int b_error; /* errno value. */
+ int b_bufsize; /* Allocated buffer size. */
+ int b_bcount; /* Valid bytes in buffer. */
+ int b_resid; /* Remaining I/O. */
+ dev_t b_dev; /* Device associated with buffer. */
+ uintptr_t b_datap; /* Memory, superblocks, indirect etc.*/
+ daddr64_t b_lblkno; /* Logical block number. */
+ daddr64_t b_blkno; /* Underlying physical block number. */
+ void (*b_iodone)(buf_t, void *); /* Function to call upon completion. */
+ vnode_t b_vp; /* File vnode for data, device vnode for metadata. */
+ kauth_cred_t b_rcred; /* Read credentials reference. */
+ kauth_cred_t b_wcred; /* Write credentials reference. */
+ void * b_upl; /* Pointer to UPL */
+ buf_t b_real_bp; /* used to track bp generated through cluster_bp */
+ TAILQ_ENTRY(buf) b_act; /* Device driver queue when active */
+ void * b_drvdata; /* Device driver private use */
+ void * b_fsprivate; /* filesystem private use */
+ void * b_transaction; /* journal private use */
+ int b_dirtyoff; /* Offset in buffer of dirty region. */
+ int b_dirtyend; /* Offset of end of dirty region. */
+ int b_validoff; /* Offset in buffer of valid region. */
+ int b_validend; /* Offset of end of valid region. */