• Home
  • Raw
  • Download

Lines Matching full:ids

38  *  The ids->rwsem must be taken when:
75 int ids; member
110 * @ids: ipc identifier set
113 * below IPCMNI) then initialise the keys hashtable and ids idr.
115 void ipc_init_ids(struct ipc_ids *ids) in ipc_init_ids() argument
117 ids->in_use = 0; in ipc_init_ids()
118 ids->seq = 0; in ipc_init_ids()
119 init_rwsem(&ids->rwsem); in ipc_init_ids()
120 rhashtable_init(&ids->key_ht, &ipc_kht_params); in ipc_init_ids()
121 idr_init(&ids->ipcs_idr); in ipc_init_ids()
122 ids->max_idx = -1; in ipc_init_ids()
124 ids->next_id = -1; in ipc_init_ids()
134 * @ids: ipc id table to iterate.
138 int ids, int (*show)(struct seq_file *, void *)) in ipc_init_proc_interface() argument
148 iface->ids = ids; in ipc_init_proc_interface()
163 * @ids: ipc identifier set
171 static struct kern_ipc_perm *ipc_findkey(struct ipc_ids *ids, key_t key) in ipc_findkey() argument
175 ipcp = rhashtable_lookup_fast(&ids->key_ht, &key, in ipc_findkey()
197 static inline int ipc_idr_alloc(struct ipc_ids *ids, struct kern_ipc_perm *new) in ipc_idr_alloc() argument
202 next_id = ids->next_id; in ipc_idr_alloc()
203 ids->next_id = -1; in ipc_idr_alloc()
219 new->seq = ids->seq++; in ipc_idr_alloc()
220 if (ids->seq > IPCID_SEQ_MAX) in ipc_idr_alloc()
221 ids->seq = 0; in ipc_idr_alloc()
222 idx = idr_alloc(&ids->ipcs_idr, new, 0, 0, GFP_NOWAIT); in ipc_idr_alloc()
225 idx = idr_alloc(&ids->ipcs_idr, new, ipcid_to_idx(next_id), in ipc_idr_alloc()
235 * @ids: ipc identifier set
237 * @limit: limit for the number of used ids
239 * Add an entry 'new' to the ipc ids idr. The permissions object is
248 int ipc_addid(struct ipc_ids *ids, struct kern_ipc_perm *new, int limit) in ipc_addid() argument
260 if (ids->in_use >= limit) in ipc_addid()
275 idx = ipc_idr_alloc(ids, new); in ipc_addid()
279 err = rhashtable_insert_fast(&ids->key_ht, &new->khtnode, in ipc_addid()
282 idr_remove(&ids->ipcs_idr, idx); in ipc_addid()
293 ids->in_use++; in ipc_addid()
294 if (idx > ids->max_idx) in ipc_addid()
295 ids->max_idx = idx; in ipc_addid()
302 * @ids: ipc identifier set
309 static int ipcget_new(struct ipc_namespace *ns, struct ipc_ids *ids, in ipcget_new() argument
314 down_write(&ids->rwsem); in ipcget_new()
316 up_write(&ids->rwsem); in ipcget_new()
356 * @ids: ipc identifier set
367 static int ipcget_public(struct ipc_namespace *ns, struct ipc_ids *ids, in ipcget_public() argument
378 down_write(&ids->rwsem); in ipcget_public()
379 ipcp = ipc_findkey(ids, params->key); in ipcget_public()
404 up_write(&ids->rwsem); in ipcget_public()
411 * @ids: ipc identifier set
417 static void ipc_kht_remove(struct ipc_ids *ids, struct kern_ipc_perm *ipcp) in ipc_kht_remove() argument
420 rhashtable_remove_fast(&ids->key_ht, &ipcp->khtnode, in ipc_kht_remove()
426 * @ids: ipc identifier set
432 void ipc_rmid(struct ipc_ids *ids, struct kern_ipc_perm *ipcp) in ipc_rmid() argument
436 idr_remove(&ids->ipcs_idr, idx); in ipc_rmid()
437 ipc_kht_remove(ids, ipcp); in ipc_rmid()
438 ids->in_use--; in ipc_rmid()
441 if (unlikely(idx == ids->max_idx)) { in ipc_rmid()
446 } while (!idr_find(&ids->ipcs_idr, idx)); in ipc_rmid()
447 ids->max_idx = idx; in ipc_rmid()
453 * @ids: ipc identifier set
459 void ipc_set_key_private(struct ipc_ids *ids, struct kern_ipc_perm *ipcp) in ipc_set_key_private() argument
461 ipc_kht_remove(ids, ipcp); in ipc_set_key_private()
556 * @ids: ipc identifier set
559 * Look for an id in the ipc ids idr and return associated ipc object.
564 struct kern_ipc_perm *ipc_obtain_object_idr(struct ipc_ids *ids, int id) in ipc_obtain_object_idr() argument
569 out = idr_find(&ids->ipcs_idr, idx); in ipc_obtain_object_idr()
578 * @ids: ipc identifier set
587 struct kern_ipc_perm *ipc_obtain_object_check(struct ipc_ids *ids, int id) in ipc_obtain_object_check() argument
589 struct kern_ipc_perm *out = ipc_obtain_object_idr(ids, id); in ipc_obtain_object_check()
603 * @ids: ipc identifier set
610 int ipcget(struct ipc_namespace *ns, struct ipc_ids *ids, in ipcget() argument
614 return ipcget_new(ns, ids, ops, params); in ipcget()
616 return ipcget_public(ns, ids, ops, params); in ipcget()
642 * @ids: the table of ids where to look for the ipc
660 struct ipc_ids *ids, int id, int cmd, in ipcctl_obtain_check() argument
667 ipcp = ipc_obtain_object_check(ids, id); in ipcctl_obtain_check()
725 static struct kern_ipc_perm *sysvipc_find_ipc(struct ipc_ids *ids, loff_t pos, in sysvipc_find_ipc() argument
730 int max_idx = ipc_get_maxidx(ids); in sysvipc_find_ipc()
736 ipc = idr_find(&ids->ipcs_idr, pos); in sysvipc_find_ipc()
758 return sysvipc_find_ipc(&iter->ns->ids[iface->ids], *pos, pos); in sysvipc_proc_next()
769 struct ipc_ids *ids; in sysvipc_proc_start() local
771 ids = &iter->ns->ids[iface->ids]; in sysvipc_proc_start()
777 down_read(&ids->rwsem); in sysvipc_proc_start()
788 return sysvipc_find_ipc(ids, *pos - 1, pos); in sysvipc_proc_start()
796 struct ipc_ids *ids; in sysvipc_proc_stop() local
802 ids = &iter->ns->ids[iface->ids]; in sysvipc_proc_stop()
804 up_read(&ids->rwsem); in sysvipc_proc_stop()