md/bitmap: merge bitmap_file_unmap and bitmap_file_put.
There functions really do one thing together: release the 'bitmap_storage'. So make them just one function. Since we removed the locking (previous patch), we don't need to zero any fields before freeing them, so it all becomes a bit simpler. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
62f82faace
commit
fae7d326cd
1 changed files with 10 additions and 24 deletions
|
@ -732,43 +732,25 @@ static int bitmap_storage_alloc(struct bitmap_storage *store,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bitmap_file_unmap(struct bitmap *bitmap)
|
static void bitmap_file_unmap(struct bitmap_storage *store)
|
||||||
{
|
{
|
||||||
struct page **map, *sb_page;
|
struct page **map, *sb_page;
|
||||||
unsigned long *attr;
|
|
||||||
int pages;
|
int pages;
|
||||||
struct bitmap_storage *store = &bitmap->storage;
|
struct file *file;
|
||||||
|
|
||||||
|
file = store->file;
|
||||||
map = store->filemap;
|
map = store->filemap;
|
||||||
store->filemap = NULL;
|
|
||||||
attr = store->filemap_attr;
|
|
||||||
store->filemap_attr = NULL;
|
|
||||||
pages = store->file_pages;
|
pages = store->file_pages;
|
||||||
store->file_pages = 0;
|
|
||||||
sb_page = store->sb_page;
|
sb_page = store->sb_page;
|
||||||
store->sb_page = NULL;
|
|
||||||
|
|
||||||
while (pages--)
|
while (pages--)
|
||||||
if (map[pages] != sb_page) /* 0 is sb_page, release it below */
|
if (map[pages] != sb_page) /* 0 is sb_page, release it below */
|
||||||
free_buffers(map[pages]);
|
free_buffers(map[pages]);
|
||||||
kfree(map);
|
kfree(map);
|
||||||
kfree(attr);
|
kfree(store->filemap_attr);
|
||||||
|
|
||||||
if (sb_page)
|
if (sb_page)
|
||||||
free_buffers(sb_page);
|
free_buffers(sb_page);
|
||||||
}
|
|
||||||
|
|
||||||
static void bitmap_file_put(struct bitmap *bitmap)
|
|
||||||
{
|
|
||||||
struct file *file;
|
|
||||||
|
|
||||||
file = bitmap->storage.file;
|
|
||||||
bitmap->storage.file = NULL;
|
|
||||||
|
|
||||||
if (file)
|
|
||||||
wait_event(bitmap->write_wait,
|
|
||||||
atomic_read(&bitmap->pending_writes)==0);
|
|
||||||
bitmap_file_unmap(bitmap);
|
|
||||||
|
|
||||||
if (file) {
|
if (file) {
|
||||||
struct inode *inode = file->f_path.dentry->d_inode;
|
struct inode *inode = file->f_path.dentry->d_inode;
|
||||||
|
@ -1610,8 +1592,12 @@ static void bitmap_free(struct bitmap *bitmap)
|
||||||
if (!bitmap) /* there was no bitmap */
|
if (!bitmap) /* there was no bitmap */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* release the bitmap file and kill the daemon */
|
/* Shouldn't be needed - but just in case.... */
|
||||||
bitmap_file_put(bitmap);
|
wait_event(bitmap->write_wait,
|
||||||
|
atomic_read(&bitmap->pending_writes) == 0);
|
||||||
|
|
||||||
|
/* release the bitmap file */
|
||||||
|
bitmap_file_unmap(&bitmap->storage);
|
||||||
|
|
||||||
bp = bitmap->bp;
|
bp = bitmap->bp;
|
||||||
pages = bitmap->pages;
|
pages = bitmap->pages;
|
||||||
|
|
Loading…
Add table
Reference in a new issue