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

Commit bf99ec13 authored by Mike Christie's avatar Mike Christie Committed by Nicholas Bellinger
Browse files

tcmu: merge common block release code



Have unmap_thread_fn use tcmu_blocks_release.

Signed-off-by: default avatarMike Christie <mchristi@redhat.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 26d2b310
Loading
Loading
Loading
Loading
+8 −16
Original line number Diff line number Diff line
@@ -1302,21 +1302,19 @@ static int tcmu_check_and_free_pending_cmd(struct tcmu_cmd *cmd)
	return -EINVAL;
}

static void tcmu_blocks_release(struct tcmu_dev *udev)
static void tcmu_blocks_release(struct radix_tree_root *blocks,
				int start, int end)
{
	int i;
	struct page *page;

	/* Try to release all block pages */
	mutex_lock(&udev->cmdr_lock);
	for (i = 0; i <= udev->dbi_max; i++) {
		page = radix_tree_delete(&udev->data_blocks, i);
	for (i = start; i < end; i++) {
		page = radix_tree_delete(blocks, i);
		if (page) {
			__free_page(page);
			atomic_dec(&global_db_count);
		}
	}
	mutex_unlock(&udev->cmdr_lock);
}

static void tcmu_dev_kref_release(struct kref *kref)
@@ -1340,7 +1338,9 @@ static void tcmu_dev_kref_release(struct kref *kref)
	spin_unlock_irq(&udev->commands_lock);
	WARN_ON(!all_expired);

	tcmu_blocks_release(udev);
	mutex_lock(&udev->cmdr_lock);
	tcmu_blocks_release(&udev->data_blocks, 0, udev->dbi_max + 1);
	mutex_unlock(&udev->cmdr_lock);

	call_rcu(&dev->rcu_head, tcmu_dev_call_rcu);
}
@@ -1978,8 +1978,6 @@ static int unmap_thread_fn(void *data)
	struct tcmu_dev *udev;
	loff_t off;
	uint32_t start, end, block;
	struct page *page;
	int i;

	while (!kthread_should_stop()) {
		DEFINE_WAIT(__wait);
@@ -2027,13 +2025,7 @@ static int unmap_thread_fn(void *data)
			unmap_mapping_range(udev->inode->i_mapping, off, 0, 1);

			/* Release the block pages */
			for (i = start; i < end; i++) {
				page = radix_tree_delete(&udev->data_blocks, i);
				if (page) {
					__free_page(page);
					atomic_dec(&global_db_count);
				}
			}
			tcmu_blocks_release(&udev->data_blocks, start, end);
			mutex_unlock(&udev->cmdr_lock);
		}