Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fae7d326 authored by NeilBrown's avatar NeilBrown
Browse files

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: default avatarNeilBrown <neilb@suse.de>
parent 62f82faa
Loading
Loading
Loading
Loading
+10 −24
Original line number Diff line number Diff line
@@ -732,43 +732,25 @@ static int bitmap_storage_alloc(struct bitmap_storage *store,
	return 0;
}

static void bitmap_file_unmap(struct bitmap *bitmap)
static void bitmap_file_unmap(struct bitmap_storage *store)
{
	struct page **map, *sb_page;
	unsigned long *attr;
	int pages;
	struct bitmap_storage *store = &bitmap->storage;
	struct file *file;

	file = store->file;
	map = store->filemap;
	store->filemap = NULL;
	attr = store->filemap_attr;
	store->filemap_attr = NULL;
	pages = store->file_pages;
	store->file_pages = 0;
	sb_page = store->sb_page;
	store->sb_page = NULL;

	while (pages--)
		if (map[pages] != sb_page) /* 0 is sb_page, release it below */
			free_buffers(map[pages]);
	kfree(map);
	kfree(attr);
	kfree(store->filemap_attr);

	if (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) {
		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 */
		return;

	/* release the bitmap file and kill the daemon */
	bitmap_file_put(bitmap);
	/* Shouldn't be needed - but just in case.... */
	wait_event(bitmap->write_wait,
		   atomic_read(&bitmap->pending_writes) == 0);

	/* release the bitmap file  */
	bitmap_file_unmap(&bitmap->storage);

	bp = bitmap->bp;
	pages = bitmap->pages;