/* * returns a count of the number of free bits in a plane. */ int ssd_free_bits(int plane_num, int elem_num, ssd_element_metadata *metadata, ssd_t *s) { int i; int freecount = 0; int start = plane_num * s->params.blocks_per_plane; for (i = start; i < start + (int)s->params.blocks_per_plane; i ++) { if (!ssd_bit_on(metadata->free_blocks, i)) { freecount ++; } } return freecount; }
/* * we clean a block only after it is fully used. */ int ssd_can_clean_block(ssd_t *s, ssd_element_metadata *metadata, int blk) { int bitpos = ssd_block_to_bitpos(s, blk); return ((ssd_bit_on(metadata->free_blocks, bitpos)) && (metadata->block_usage[blk].state == SSD_BLOCK_SEALED)); }