hammer2 - Stabilization, optimization

Operating Systems / DragonFlyBSD - Matthew Dillon [apollo.backplane.com] - 25 June 2016 12:49 UTC

- Increase the hammer2_io.refs field to 64 bits so we can add a few more control bits.

- Track whether invalidation is ok at the DIO level for full-sized (64KB) data blocks. We continue to use the slightly less-capable CHAIN_DEDUP flag for smaller data blocks (this flag gets set on frontend->backend flush whereas the DIO level flag is only cleared when a block is actually reused for deduplication).

- Separate vfs.hammer2.cluster_enable into cluster_read and cluster_write. Leave cluster_read enabled with a read-ahead of 4 blocks. Disable cluster_write for now, but still set B_CLUSTEROK in the bdwrite().

This allows the frontend to 'flush' data to the backend without initiating disk I/O on the block device, giving us a chance to discard the data later if it winds up being temporary.

- Remove an improper BUF_KERNPROC(dio->bp) in the case where a different thread owns the in-progress DIO.

- Defer setting of B_INVAL | B_RELBUF to when the DIO is in lastdrop.

- Add missing brelse() in the hammer2_read_file() error path. Add missing B_CLUSTEROK in hammer2_write_file().

- The bulkfree code now ensures that the INVALOK bit in any related DIO for a freed block is cleared, preventing accidental invalidations on reuse.

7767d38 hammer2 - Stabilization, optimization
sys/vfs/hammer2/hammer2.h | 23 ++++---
sys/vfs/hammer2/hammer2_bulkfree.c | 27 ++++++--
sys/vfs/hammer2/hammer2_chain.c | 87 ++++++++++++++++-------
sys/vfs/hammer2/hammer2_flush.c | 25 ++++---
sys/vfs/hammer2/hammer2_io.c | 133 ++++++++++++++++++++++++------------
sys/vfs/hammer2/hammer2_strategy.c | 10 +++
sys/vfs/hammer2/hammer2_vfsops.c | 9 ++-
sys/vfs/hammer2/hammer2_vnops.c | 5 +-
8 files changed, 225 insertions(+), 94 deletions(-)

Upstream: gitweb.dragonflybsd.org


  • Share