* bufkva_free: * * Free the kva allocation for a buffer. * */
| 1995 | * |
| 1996 | */ |
| 1997 | static void |
| 1998 | bufkva_free(struct buf *bp) |
| 1999 | { |
| 2000 | |
| 2001 | #ifdef INVARIANTS |
| 2002 | if (bp->b_kvasize == 0) { |
| 2003 | KASSERT(bp->b_kvabase == unmapped_buf && |
| 2004 | bp->b_data == unmapped_buf, |
| 2005 | ("Leaked KVA space on %p", bp)); |
| 2006 | } else if (buf_mapped(bp)) |
| 2007 | BUF_CHECK_MAPPED(bp); |
| 2008 | else |
| 2009 | BUF_CHECK_UNMAPPED(bp); |
| 2010 | #endif |
| 2011 | if (bp->b_kvasize == 0) |
| 2012 | return; |
| 2013 | |
| 2014 | vmem_free(buffer_arena, (vm_offset_t)bp->b_kvabase, bp->b_kvasize); |
| 2015 | counter_u64_add(bufkvaspace, -bp->b_kvasize); |
| 2016 | counter_u64_add(buffreekvacnt, 1); |
| 2017 | bp->b_data = bp->b_kvabase = unmapped_buf; |
| 2018 | bp->b_kvasize = 0; |
| 2019 | } |
| 2020 | |
| 2021 | /* |
| 2022 | * bufkva_alloc: |
no test coverage detected