((struct shmid_kernel*)ipc_lock(&shm_ids(ns),id))
#define shm_unlock(shp) \
ipc_unlock(&(shp)->shm_perm)
-#define shm_get(ns, id) \
- ((struct shmid_kernel*)ipc_get(&shm_ids(ns),id))
#define shm_buildid(ns, id, seq) \
ipc_buildid(&shm_ids(ns), id, seq)
struct shmid_kernel *shp;
struct inode *inode;
- shp = shm_get(ns, next_id);
+ /*
+ * idr_find() is called via shm_get(), so with shm_ids.mutex
+ * locked. Since ipc_addid() is also called with
+ * shm_ids.mutex down, there is no need to add read barriers
+ * here to gurantee the writes in ipc_addid() are seen in
+ * order here (for Alpha).
+ * However idr_find() itself does not necessary require
+ * ipc_ids.mutex down. So if idr_find() is used by other
+ * places without ipc_ids.mutex down, then it needs read
+ * read memory barriers as ipc_lock() does.
+ */
+
+ shp = idr_find(&shm_ids(ns).ipcs_idr, next_id);
if (shp == NULL)
continue;
out->seq = in->seq;
}
-/*
- * So far only shm_get_stat() calls ipc_get() via shm_get(), so ipc_get()
- * is called with shm_ids.mutex locked. Since grow_ary() is also called with
- * shm_ids.mutex down(for Shared Memory), there is no need to add read
- * barriers here to gurantee the writes in grow_ary() are seen in order
- * here (for Alpha).
- *
- * However ipc_get() itself does not necessary require ipc_ids.mutex down. So
- * if in the future ipc_get() is used by other places without ipc_ids.mutex
- * down, then ipc_get() needs read memery barriers as ipc_lock() does.
- */
-struct kern_ipc_perm *ipc_get(struct ipc_ids *ids, int id)
-{
- struct kern_ipc_perm *out;
- int lid = id % SEQ_MULTIPLIER;
- out = idr_find(&ids->ipcs_idr, lid);
- return out;
-}
-
struct kern_ipc_perm *ipc_lock(struct ipc_ids *ids, int id)
{
struct kern_ipc_perm *out;
void ipc_rcu_getref(void *ptr);
void ipc_rcu_putref(void *ptr);
-struct kern_ipc_perm* ipc_get(struct ipc_ids* ids, int id);
struct kern_ipc_perm* ipc_lock(struct ipc_ids* ids, int id);
void ipc_lock_by_ptr(struct kern_ipc_perm *ipcp);
void ipc_unlock(struct kern_ipc_perm* perm);