|
@@ -126,7 +126,6 @@ int ipc_init_ids(struct ipc_ids *ids)
|
|
|
if (err)
|
|
|
return err;
|
|
|
idr_init(&ids->ipcs_idr);
|
|
|
- ids->tables_initialized = true;
|
|
|
ids->max_id = -1;
|
|
|
#ifdef CONFIG_CHECKPOINT_RESTORE
|
|
|
ids->next_id = -1;
|
|
@@ -179,19 +178,16 @@ void __init ipc_init_proc_interface(const char *path, const char *header,
|
|
|
*/
|
|
|
static struct kern_ipc_perm *ipc_findkey(struct ipc_ids *ids, key_t key)
|
|
|
{
|
|
|
- struct kern_ipc_perm *ipcp = NULL;
|
|
|
+ struct kern_ipc_perm *ipcp;
|
|
|
|
|
|
- if (likely(ids->tables_initialized))
|
|
|
- ipcp = rhashtable_lookup_fast(&ids->key_ht, &key,
|
|
|
+ ipcp = rhashtable_lookup_fast(&ids->key_ht, &key,
|
|
|
ipc_kht_params);
|
|
|
+ if (!ipcp)
|
|
|
+ return NULL;
|
|
|
|
|
|
- if (ipcp) {
|
|
|
- rcu_read_lock();
|
|
|
- ipc_lock_object(ipcp);
|
|
|
- return ipcp;
|
|
|
- }
|
|
|
-
|
|
|
- return NULL;
|
|
|
+ rcu_read_lock();
|
|
|
+ ipc_lock_object(ipcp);
|
|
|
+ return ipcp;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -269,7 +265,7 @@ int ipc_addid(struct ipc_ids *ids, struct kern_ipc_perm *new, int limit)
|
|
|
if (limit > IPCMNI)
|
|
|
limit = IPCMNI;
|
|
|
|
|
|
- if (!ids->tables_initialized || ids->in_use >= limit)
|
|
|
+ if (ids->in_use >= limit)
|
|
|
return -ENOSPC;
|
|
|
|
|
|
idr_preload(GFP_KERNEL);
|
|
@@ -578,9 +574,6 @@ struct kern_ipc_perm *ipc_obtain_object_idr(struct ipc_ids *ids, int id)
|
|
|
struct kern_ipc_perm *out;
|
|
|
int lid = ipcid_to_idx(id);
|
|
|
|
|
|
- if (unlikely(!ids->tables_initialized))
|
|
|
- return ERR_PTR(-EINVAL);
|
|
|
-
|
|
|
out = idr_find(&ids->ipcs_idr, lid);
|
|
|
if (!out)
|
|
|
return ERR_PTR(-EINVAL);
|