|
@@ -74,6 +74,17 @@ static inline uint16_t get_client_id_from_client(struct zcache_client *cli)
|
|
|
return cli - &zcache_clients[0];
|
|
|
}
|
|
|
|
|
|
+static struct zcache_client *get_zcache_client(uint16_t cli_id)
|
|
|
+{
|
|
|
+ if (cli_id == LOCAL_CLIENT)
|
|
|
+ return &zcache_host;
|
|
|
+
|
|
|
+ if ((unsigned int)cli_id < MAX_CLIENTS)
|
|
|
+ return &zcache_clients[cli_id];
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
static inline bool is_local_client(struct zcache_client *cli)
|
|
|
{
|
|
|
return cli == &zcache_host;
|
|
@@ -935,15 +946,9 @@ static struct tmem_pool *zcache_get_pool_by_id(uint16_t cli_id, uint16_t poolid)
|
|
|
struct tmem_pool *pool = NULL;
|
|
|
struct zcache_client *cli = NULL;
|
|
|
|
|
|
- if (cli_id == LOCAL_CLIENT)
|
|
|
- cli = &zcache_host;
|
|
|
- else {
|
|
|
- if (cli_id >= MAX_CLIENTS)
|
|
|
- goto out;
|
|
|
- cli = &zcache_clients[cli_id];
|
|
|
- if (cli == NULL)
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ cli = get_zcache_client(cli_id);
|
|
|
+ if (!cli)
|
|
|
+ goto out;
|
|
|
|
|
|
atomic_inc(&cli->refcount);
|
|
|
pool = idr_find(&cli->tmem_pools, poolid);
|
|
@@ -966,13 +971,11 @@ static void zcache_put_pool(struct tmem_pool *pool)
|
|
|
|
|
|
int zcache_new_client(uint16_t cli_id)
|
|
|
{
|
|
|
- struct zcache_client *cli = NULL;
|
|
|
+ struct zcache_client *cli;
|
|
|
int ret = -1;
|
|
|
|
|
|
- if (cli_id == LOCAL_CLIENT)
|
|
|
- cli = &zcache_host;
|
|
|
- else if ((unsigned int)cli_id < MAX_CLIENTS)
|
|
|
- cli = &zcache_clients[cli_id];
|
|
|
+ cli = get_zcache_client(cli_id);
|
|
|
+
|
|
|
if (cli == NULL)
|
|
|
goto out;
|
|
|
if (cli->allocated)
|
|
@@ -1649,17 +1652,16 @@ static int zcache_flush_object(int cli_id, int pool_id,
|
|
|
static int zcache_destroy_pool(int cli_id, int pool_id)
|
|
|
{
|
|
|
struct tmem_pool *pool = NULL;
|
|
|
- struct zcache_client *cli = NULL;
|
|
|
+ struct zcache_client *cli;
|
|
|
int ret = -1;
|
|
|
|
|
|
if (pool_id < 0)
|
|
|
goto out;
|
|
|
- if (cli_id == LOCAL_CLIENT)
|
|
|
- cli = &zcache_host;
|
|
|
- else if ((unsigned int)cli_id < MAX_CLIENTS)
|
|
|
- cli = &zcache_clients[cli_id];
|
|
|
+
|
|
|
+ cli = get_zcache_client(cli_id);
|
|
|
if (cli == NULL)
|
|
|
goto out;
|
|
|
+
|
|
|
atomic_inc(&cli->refcount);
|
|
|
pool = idr_find(&cli->tmem_pools, pool_id);
|
|
|
if (pool == NULL)
|
|
@@ -1686,12 +1688,10 @@ static int zcache_new_pool(uint16_t cli_id, uint32_t flags)
|
|
|
struct zcache_client *cli = NULL;
|
|
|
int r;
|
|
|
|
|
|
- if (cli_id == LOCAL_CLIENT)
|
|
|
- cli = &zcache_host;
|
|
|
- else if ((unsigned int)cli_id < MAX_CLIENTS)
|
|
|
- cli = &zcache_clients[cli_id];
|
|
|
+ cli = get_zcache_client(cli_id);
|
|
|
if (cli == NULL)
|
|
|
goto out;
|
|
|
+
|
|
|
atomic_inc(&cli->refcount);
|
|
|
pool = kmalloc(sizeof(struct tmem_pool), GFP_ATOMIC);
|
|
|
if (pool == NULL) {
|