Lines Matching +full:5 +full:ns

76 	struct ipc_namespace	*ns;  member
85 struct ipc_namespace *ns; member
95 #define shm_ids(ns) ((ns)->ids[IPC_SHM_IDS]) argument
103 static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp);
108 void shm_init_ns(struct ipc_namespace *ns) in shm_init_ns() argument
110 ns->shm_ctlmax = SHMMAX; in shm_init_ns()
111 ns->shm_ctlall = SHMALL; in shm_init_ns()
112 ns->shm_ctlmni = SHMMNI; in shm_init_ns()
113 ns->shm_rmid_forced = 0; in shm_init_ns()
114 ns->shm_tot = 0; in shm_init_ns()
115 ipc_init_ids(&shm_ids(ns)); in shm_init_ns()
122 static void do_shm_rmid(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp) in do_shm_rmid() argument
127 WARN_ON(ns != shp->ns); in do_shm_rmid()
132 ipc_set_key_private(&shm_ids(ns), &shp->shm_perm); in do_shm_rmid()
135 shm_destroy(ns, shp); in do_shm_rmid()
139 void shm_exit_ns(struct ipc_namespace *ns) in shm_exit_ns() argument
141 free_ipcs(ns, &shm_ids(ns), do_shm_rmid); in shm_exit_ns()
142 idr_destroy(&ns->ids[IPC_SHM_IDS].ipcs_idr); in shm_exit_ns()
143 rhashtable_destroy(&ns->ids[IPC_SHM_IDS].key_ht); in shm_exit_ns()
166 static inline struct shmid_kernel *shm_obtain_object(struct ipc_namespace *ns, int id) in shm_obtain_object() argument
168 struct kern_ipc_perm *ipcp = ipc_obtain_object_idr(&shm_ids(ns), id); in shm_obtain_object()
176 static inline struct shmid_kernel *shm_obtain_object_check(struct ipc_namespace *ns, int id) in shm_obtain_object_check() argument
178 struct kern_ipc_perm *ipcp = ipc_obtain_object_check(&shm_ids(ns), id); in shm_obtain_object_check()
190 static inline struct shmid_kernel *shm_lock(struct ipc_namespace *ns, int id) in shm_lock() argument
195 ipcp = ipc_obtain_object_idr(&shm_ids(ns), id); in shm_lock()
274 ipc_rmid(&shm_ids(s->ns), &s->shm_perm); in shm_rmid()
284 shp = shm_lock(sfd->ns, sfd->id); in __shm_open()
316 * @ns: namespace
322 static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp) in shm_destroy() argument
328 ns->shm_tot -= (shp->shm_segsz + PAGE_SIZE - 1) >> PAGE_SHIFT; in shm_destroy()
355 (shp->ns->shm_rmid_forced || in shm_may_destroy()
370 struct ipc_namespace *ns = sfd->ns; in shm_close() local
372 down_write(&shm_ids(ns).rwsem); in shm_close()
374 shp = shm_lock(ns, sfd->id); in shm_close()
387 shm_destroy(ns, shp); in shm_close()
391 up_write(&shm_ids(ns).rwsem); in shm_close()
394 /* Called with ns->shm_ids(ns).rwsem locked */
397 struct ipc_namespace *ns = data; in shm_try_destroy_orphaned() local
412 shm_destroy(ns, shp); in shm_try_destroy_orphaned()
417 void shm_destroy_orphaned(struct ipc_namespace *ns) in shm_destroy_orphaned() argument
419 down_write(&shm_ids(ns).rwsem); in shm_destroy_orphaned()
420 if (shm_ids(ns).in_use) in shm_destroy_orphaned()
421 idr_for_each(&shm_ids(ns).ipcs_idr, &shm_try_destroy_orphaned, ns); in shm_destroy_orphaned()
422 up_write(&shm_ids(ns).rwsem); in shm_destroy_orphaned()
430 struct ipc_namespace *ns; in exit_shm() local
449 ns = shp->ns; in exit_shm()
456 if (!ns->shm_rmid_forced) in exit_shm()
464 ns = get_ipc_ns_not_zero(ns); in exit_shm()
465 if (!ns) { in exit_shm()
480 * 5) unlink the shm segment from the list of segments in exit_shm()
494 down_write(&shm_ids(ns).rwsem); in exit_shm()
504 shm_destroy(ns, shp); in exit_shm()
516 up_write(&shm_ids(ns).rwsem); in exit_shm()
517 put_ipc_ns(ns); /* paired with get_ipc_ns_not_zero */ in exit_shm()
610 put_ipc_ns(sfd->ns); in shm_release()
687 * @ns: namespace
692 static int newseg(struct ipc_namespace *ns, struct ipc_params *params) in newseg() argument
704 if (size < SHMMIN || size > ns->shm_ctlmax) in newseg()
710 if (ns->shm_tot + numpages < ns->shm_tot || in newseg()
711 ns->shm_tot + numpages > ns->shm_ctlall) in newseg()
771 error = ipc_addid(&shm_ids(ns), &shp->shm_perm, ns->shm_ctlmni); in newseg()
775 shp->ns = ns; in newseg()
787 ns->shm_tot += numpages; in newseg()
823 struct ipc_namespace *ns; in ksys_shmget() local
831 ns = current->nsproxy->ipc_ns; in ksys_shmget()
837 return ipcget(ns, &shm_ids(ns), &shm_ops, &shm_params); in ksys_shmget()
955 static void shm_get_stat(struct ipc_namespace *ns, unsigned long *rss, in shm_get_stat() argument
964 in_use = shm_ids(ns).in_use; in shm_get_stat()
970 ipc = idr_find(&shm_ids(ns).ipcs_idr, next_id); in shm_get_stat()
986 static int shmctl_down(struct ipc_namespace *ns, int shmid, int cmd, in shmctl_down() argument
993 down_write(&shm_ids(ns).rwsem); in shmctl_down()
996 ipcp = ipcctl_obtain_check(ns, &shm_ids(ns), shmid, cmd, in shmctl_down()
1013 do_shm_rmid(ns, ipcp); in shmctl_down()
1032 up_write(&shm_ids(ns).rwsem); in shmctl_down()
1036 static int shmctl_ipc_info(struct ipc_namespace *ns, in shmctl_ipc_info() argument
1042 shminfo->shmmni = shminfo->shmseg = ns->shm_ctlmni; in shmctl_ipc_info()
1043 shminfo->shmmax = ns->shm_ctlmax; in shmctl_ipc_info()
1044 shminfo->shmall = ns->shm_ctlall; in shmctl_ipc_info()
1046 down_read(&shm_ids(ns).rwsem); in shmctl_ipc_info()
1047 err = ipc_get_maxidx(&shm_ids(ns)); in shmctl_ipc_info()
1048 up_read(&shm_ids(ns).rwsem); in shmctl_ipc_info()
1055 static int shmctl_shm_info(struct ipc_namespace *ns, in shmctl_shm_info() argument
1061 down_read(&shm_ids(ns).rwsem); in shmctl_shm_info()
1062 shm_info->used_ids = shm_ids(ns).in_use; in shmctl_shm_info()
1063 shm_get_stat(ns, &shm_info->shm_rss, &shm_info->shm_swp); in shmctl_shm_info()
1064 shm_info->shm_tot = ns->shm_tot; in shmctl_shm_info()
1067 err = ipc_get_maxidx(&shm_ids(ns)); in shmctl_shm_info()
1068 up_read(&shm_ids(ns).rwsem); in shmctl_shm_info()
1075 static int shmctl_stat(struct ipc_namespace *ns, int shmid, in shmctl_stat() argument
1085 shp = shm_obtain_object(ns, shmid); in shmctl_stat()
1091 shp = shm_obtain_object_check(ns, shmid); in shmctl_stat()
1109 if (ipcperms(ns, &shp->shm_perm, S_IRUGO)) in shmctl_stat()
1159 static int shmctl_do_lock(struct ipc_namespace *ns, int shmid, int cmd) in shmctl_do_lock() argument
1166 shp = shm_obtain_object_check(ns, shmid); in shmctl_do_lock()
1185 if (!ns_capable(ns->user_ns, CAP_IPC_LOCK)) { in shmctl_do_lock()
1238 struct ipc_namespace *ns; in ksys_shmctl() local
1244 ns = current->nsproxy->ipc_ns; in ksys_shmctl()
1249 err = shmctl_ipc_info(ns, &shminfo); in ksys_shmctl()
1258 err = shmctl_shm_info(ns, &shm_info); in ksys_shmctl()
1268 err = shmctl_stat(ns, shmid, cmd, &sem64); in ksys_shmctl()
1280 return shmctl_down(ns, shmid, cmd, &sem64); in ksys_shmctl()
1283 return shmctl_do_lock(ns, shmid, cmd); in ksys_shmctl()
1432 struct ipc_namespace *ns; in compat_ksys_shmctl() local
1436 ns = current->nsproxy->ipc_ns; in compat_ksys_shmctl()
1444 err = shmctl_ipc_info(ns, &shminfo); in compat_ksys_shmctl()
1453 err = shmctl_shm_info(ns, &shm_info); in compat_ksys_shmctl()
1463 err = shmctl_stat(ns, shmid, cmd, &sem64); in compat_ksys_shmctl()
1475 return shmctl_down(ns, shmid, cmd, &sem64); in compat_ksys_shmctl()
1478 return shmctl_do_lock(ns, shmid, cmd); in compat_ksys_shmctl()
1523 struct ipc_namespace *ns; in do_shmat() local
1573 ns = current->nsproxy->ipc_ns; in do_shmat()
1575 shp = shm_obtain_object_check(ns, shmid); in do_shmat()
1582 if (ipcperms(ns, &shp->shm_perm, acc_mode)) in do_shmat()
1632 sfd->ns = get_ipc_ns(ns); in do_shmat()
1669 down_write(&shm_ids(ns).rwsem); in do_shmat()
1670 shp = shm_lock(ns, shmid); in do_shmat()
1674 shm_destroy(ns, shp); in do_shmat()
1677 up_write(&shm_ids(ns).rwsem); in do_shmat()
1852 "%10d %10d %4o " SIZE_SPEC " %5u %5u " in sysvipc_shm_proc_show()
1853 "%5lu %5u %5u %5u %5u %10llu %10llu %10llu " in sysvipc_shm_proc_show()