blobfs: cleanup cache pool
Keep a global counter of the number of opened blobfs instances. Allocate the cache pool when the first instance is opened, and free the cache pool when the last instance closes. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I99db2b587b738badcd2a54c9f5dc6ec8370ce22c Reviewed-on: https://review.gerrithub.io/362606 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
a8e1295d4b
commit
e045a02ca0
@ -54,6 +54,8 @@
|
|||||||
static uint64_t g_fs_cache_size = BLOBFS_CACHE_SIZE;
|
static uint64_t g_fs_cache_size = BLOBFS_CACHE_SIZE;
|
||||||
static struct spdk_mempool *g_cache_pool;
|
static struct spdk_mempool *g_cache_pool;
|
||||||
static TAILQ_HEAD(, spdk_file) g_caches;
|
static TAILQ_HEAD(, spdk_file) g_caches;
|
||||||
|
static int g_fs_count = 0;
|
||||||
|
static pthread_mutex_t g_cache_init_lock = PTHREAD_MUTEX_INITIALIZER;
|
||||||
static pthread_spinlock_t g_caches_lock;
|
static pthread_spinlock_t g_caches_lock;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -190,9 +192,7 @@ static void cache_free_buffers(struct spdk_file *file);
|
|||||||
static void
|
static void
|
||||||
__initialize_cache(void)
|
__initialize_cache(void)
|
||||||
{
|
{
|
||||||
if (g_cache_pool != NULL) {
|
assert(g_cache_pool == NULL);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_cache_pool = spdk_mempool_create("spdk_fs_cache",
|
g_cache_pool = spdk_mempool_create("spdk_fs_cache",
|
||||||
g_fs_cache_size / CACHE_BUFFER_SIZE,
|
g_fs_cache_size / CACHE_BUFFER_SIZE,
|
||||||
@ -201,6 +201,15 @@ __initialize_cache(void)
|
|||||||
pthread_spin_init(&g_caches_lock, 0);
|
pthread_spin_init(&g_caches_lock, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
__free_cache(void)
|
||||||
|
{
|
||||||
|
assert(g_cache_pool != NULL);
|
||||||
|
|
||||||
|
spdk_mempool_free(g_cache_pool);
|
||||||
|
g_cache_pool = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static uint64_t
|
static uint64_t
|
||||||
__file_get_blob_size(struct spdk_file *file)
|
__file_get_blob_size(struct spdk_file *file)
|
||||||
{
|
{
|
||||||
@ -332,6 +341,13 @@ common_fs_bs_init(struct spdk_filesystem *fs, struct spdk_blob_store *bs)
|
|||||||
fs->sync_target.sync_fs_channel->bs_channel = spdk_bs_alloc_io_channel(fs->bs,
|
fs->sync_target.sync_fs_channel->bs_channel = spdk_bs_alloc_io_channel(fs->bs,
|
||||||
SPDK_IO_PRIORITY_DEFAULT);
|
SPDK_IO_PRIORITY_DEFAULT);
|
||||||
fs->sync_target.sync_fs_channel->send_request = __send_request_direct;
|
fs->sync_target.sync_fs_channel->send_request = __send_request_direct;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&g_cache_init_lock);
|
||||||
|
if (g_fs_count == 0) {
|
||||||
|
__initialize_cache();
|
||||||
|
}
|
||||||
|
g_fs_count++;
|
||||||
|
pthread_mutex_unlock(&g_cache_init_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -382,8 +398,6 @@ fs_alloc(struct spdk_bs_dev *dev, fs_send_request_fn send_request_fn)
|
|||||||
spdk_io_device_register(&fs->io_target, _spdk_fs_io_channel_create, _spdk_fs_channel_destroy,
|
spdk_io_device_register(&fs->io_target, _spdk_fs_io_channel_create, _spdk_fs_channel_destroy,
|
||||||
sizeof(struct spdk_fs_channel));
|
sizeof(struct spdk_fs_channel));
|
||||||
|
|
||||||
__initialize_cache();
|
|
||||||
|
|
||||||
return fs;
|
return fs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -542,6 +556,13 @@ unload_cb(void *ctx, int bserrno)
|
|||||||
struct spdk_fs_cb_args *args = &req->args;
|
struct spdk_fs_cb_args *args = &req->args;
|
||||||
struct spdk_filesystem *fs = args->fs;
|
struct spdk_filesystem *fs = args->fs;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&g_cache_init_lock);
|
||||||
|
g_fs_count--;
|
||||||
|
if (g_fs_count == 0) {
|
||||||
|
__free_cache();
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&g_cache_init_lock);
|
||||||
|
|
||||||
args->fn.fs_op(args->arg, bserrno);
|
args->fn.fs_op(args->arg, bserrno);
|
||||||
free(req);
|
free(req);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user