Lines Matching refs:ns

168 #define sem_ids(ns) ((ns)->ids[IPC_SEM_IDS])

246 void sem_init_ns(struct ipc_namespace *ns)
248 ns->sc_semmsl = SEMMSL;
249 ns->sc_semmns = SEMMNS;
250 ns->sc_semopm = SEMOPM;
251 ns->sc_semmni = SEMMNI;
252 ns->used_sems = 0;
253 ipc_init_ids(&ns->ids[IPC_SEM_IDS]);
257 void sem_exit_ns(struct ipc_namespace *ns)
259 free_ipcs(ns, &sem_ids(ns), freeary);
260 idr_destroy(&ns->ids[IPC_SEM_IDS].ipcs_idr);
261 rhashtable_destroy(&ns->ids[IPC_SEM_IDS].key_ht);
474 static inline struct sem_array *sem_obtain_object(struct ipc_namespace *ns, int id)
476 struct kern_ipc_perm *ipcp = ipc_obtain_object_idr(&sem_ids(ns), id);
485 static inline struct sem_array *sem_obtain_object_check(struct ipc_namespace *ns, int id)
487 struct kern_ipc_perm *ipcp = ipc_obtain_object_check(&sem_ids(ns), id);
502 static inline void sem_rmid(struct ipc_namespace *ns, struct sem_array *s)
504 ipc_rmid(&sem_ids(ns), &s->sem_perm);
525 * @ns: namespace
530 static int newary(struct ipc_namespace *ns, struct ipc_params *params)
542 if (ns->used_sems + nsems > ns->sc_semmns) {
576 retval = ipc_addid(&sem_ids(ns), &sma->sem_perm, ns->sc_semmni);
581 ns->used_sems += nsems;
606 struct ipc_namespace *ns;
614 ns = current->nsproxy->ipc_ns;
616 if (nsems < 0 || nsems > ns->sc_semmsl) {
624 return ipcget(ns, &sem_ids(ns), &sem_ops, &sem_params);
1169 static void freeary(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp)
1217 sem_rmid(ns, sma);
1222 ns->used_sems -= sma->sem_nsems;
1265 static int semctl_stat(struct ipc_namespace *ns, int semid, int cmd, struct semid64_ds *semid64)
1275 sma = sem_obtain_object(ns, semid);
1281 sma = sem_obtain_object_check(ns, semid);
1293 if (ipcperms(ns, &sma->sem_perm, S_IRUGO)) {
1340 static int semctl_info(struct ipc_namespace *ns, int semid, int cmd, void __user *p)
1352 seminfo.semmni = ns->sc_semmni;
1353 seminfo.semmns = ns->sc_semmns;
1354 seminfo.semmsl = ns->sc_semmsl;
1355 seminfo.semopm = ns->sc_semopm;
1360 down_read(&sem_ids(ns).rwsem);
1362 seminfo.semusz = sem_ids(ns).in_use;
1363 seminfo.semaem = ns->used_sems;
1368 max_idx = ipc_get_maxidx(&sem_ids(ns));
1369 up_read(&sem_ids(ns).rwsem);
1376 static int semctl_setval(struct ipc_namespace *ns, int semid, int semnum, int val)
1389 sma = sem_obtain_object_check(ns, semid);
1400 if (ipcperms(ns, &sma->sem_perm, S_IWUGO)) {
1436 static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, int cmd, void __user *p)
1446 sma = sem_obtain_object_check(ns, semid);
1455 if (ipcperms(ns, &sma->sem_perm, cmd == SETALL ? S_IWUGO : S_IRUGO)) {
1636 static int semctl_down(struct ipc_namespace *ns, int semid, int cmd, struct semid64_ds *semid64)
1642 down_write(&sem_ids(ns).rwsem);
1645 ipcp = ipcctl_obtain_check(ns, &sem_ids(ns), semid, cmd, &semid64->sem_perm, 0);
1662 freeary(ns, ipcp);
1682 up_write(&sem_ids(ns).rwsem);
1688 struct ipc_namespace *ns;
1697 ns = current->nsproxy->ipc_ns;
1702 return semctl_info(ns, semid, cmd, p);
1706 err = semctl_stat(ns, semid, cmd, &semid64);
1720 return semctl_main(ns, semid, semnum, cmd, p);
1730 return semctl_setval(ns, semid, semnum, val);
1738 return semctl_down(ns, semid, cmd, &semid64);
1814 struct ipc_namespace *ns;
1818 ns = current->nsproxy->ipc_ns;
1827 return semctl_info(ns, semid, cmd, p);
1831 err = semctl_stat(ns, semid, cmd, &semid64);
1845 return semctl_main(ns, semid, semnum, cmd, p);
1847 return semctl_setval(ns, semid, semnum, arg);
1854 return semctl_down(ns, semid, cmd, &semid64);
1940 * @ns: namespace
1949 static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid)
1971 sma = sem_obtain_object_check(ns, semid);
2040 struct ipc_namespace *ns;
2042 ns = current->nsproxy->ipc_ns;
2047 if (nsops > ns->sc_semopm) {
2097 un = find_alloc_undo(ns, semid);
2107 sma = sem_obtain_object_check(ns, semid);
2121 if (ipcperms(ns, &sma->sem_perm, alter ? S_IWUGO : S_IRUGO)) {