mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 22:54:01 +00:00
nilfs2: add helper functions to delete blocks from dat file
This adds delete functions for data blocks of metadata files using bitmap based allocator. nilfs_palloc_delete_entry_block() deletes an entry block (e.g. block storing dat entries), and nilfs_palloc_delete_bitmap_block() deletes a bitmap block, respectively. These helpers are intended to be used in the successive change on deallocator of block addresses ("nilfs2: free unused dat file blocks during garbage collection"). Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b22580948c
commit
da019954dd
1 changed files with 50 additions and 0 deletions
|
@ -235,6 +235,26 @@ static int nilfs_palloc_get_block(struct inode *inode, unsigned long blkoff,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_palloc_delete_block - delete a block on the persistent allocator file
|
||||
* @inode: inode of metadata file using this allocator
|
||||
* @blkoff: block offset
|
||||
* @prev: nilfs_bh_assoc struct of the last used buffer
|
||||
* @lock: spin lock protecting @prev
|
||||
*/
|
||||
static int nilfs_palloc_delete_block(struct inode *inode, unsigned long blkoff,
|
||||
struct nilfs_bh_assoc *prev,
|
||||
spinlock_t *lock)
|
||||
{
|
||||
spin_lock(lock);
|
||||
if (prev->bh && blkoff == prev->blkoff) {
|
||||
brelse(prev->bh);
|
||||
prev->bh = NULL;
|
||||
}
|
||||
spin_unlock(lock);
|
||||
return nilfs_mdt_delete_block(inode, blkoff);
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_palloc_get_desc_block - get buffer head of a group descriptor block
|
||||
* @inode: inode of metadata file using this allocator
|
||||
|
@ -273,6 +293,22 @@ static int nilfs_palloc_get_bitmap_block(struct inode *inode,
|
|||
&cache->prev_bitmap, &cache->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_palloc_delete_bitmap_block - delete a bitmap block
|
||||
* @inode: inode of metadata file using this allocator
|
||||
* @group: group number
|
||||
*/
|
||||
static int nilfs_palloc_delete_bitmap_block(struct inode *inode,
|
||||
unsigned long group)
|
||||
{
|
||||
struct nilfs_palloc_cache *cache = NILFS_MDT(inode)->mi_palloc_cache;
|
||||
|
||||
return nilfs_palloc_delete_block(inode,
|
||||
nilfs_palloc_bitmap_blkoff(inode,
|
||||
group),
|
||||
&cache->prev_bitmap, &cache->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_palloc_get_entry_block - get buffer head of an entry block
|
||||
* @inode: inode of metadata file using this allocator
|
||||
|
@ -291,6 +327,20 @@ int nilfs_palloc_get_entry_block(struct inode *inode, __u64 nr,
|
|||
&cache->prev_entry, &cache->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_palloc_delete_entry_block - delete an entry block
|
||||
* @inode: inode of metadata file using this allocator
|
||||
* @nr: serial number of the entry
|
||||
*/
|
||||
static int nilfs_palloc_delete_entry_block(struct inode *inode, __u64 nr)
|
||||
{
|
||||
struct nilfs_palloc_cache *cache = NILFS_MDT(inode)->mi_palloc_cache;
|
||||
|
||||
return nilfs_palloc_delete_block(inode,
|
||||
nilfs_palloc_entry_blkoff(inode, nr),
|
||||
&cache->prev_entry, &cache->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* nilfs_palloc_block_get_group_desc - get kernel address of a group descriptor
|
||||
* @inode: inode of metadata file using this allocator
|
||||
|
|
Loading…
Reference in a new issue