|
@@ -716,56 +716,6 @@ struct kern_ipc_perm *ipc_lock(struct ipc_ids *ids, int id)
|
|
|
return out;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * ipc_lock_down - Lock an ipc structure with rw_sem held
|
|
|
- * @ids: IPC identifier set
|
|
|
- * @id: ipc id to look for
|
|
|
- *
|
|
|
- * Look for an id in the ipc ids idr and lock the associated ipc object.
|
|
|
- *
|
|
|
- * The ipc object is locked on exit.
|
|
|
- *
|
|
|
- * This is the routine that should be called when the rw_mutex is already
|
|
|
- * held, i.e. idr tree protected.
|
|
|
- */
|
|
|
-
|
|
|
-struct kern_ipc_perm *ipc_lock_down(struct ipc_ids *ids, int id)
|
|
|
-{
|
|
|
- struct kern_ipc_perm *out;
|
|
|
- int lid = ipcid_to_idx(id);
|
|
|
-
|
|
|
- rcu_read_lock();
|
|
|
- out = idr_find(&ids->ipcs_idr, lid);
|
|
|
- if (out == NULL) {
|
|
|
- rcu_read_unlock();
|
|
|
- return ERR_PTR(-EINVAL);
|
|
|
- }
|
|
|
-
|
|
|
- spin_lock(&out->lock);
|
|
|
-
|
|
|
- /*
|
|
|
- * No need to verify that the structure is still valid since the
|
|
|
- * rw_mutex is held.
|
|
|
- */
|
|
|
- return out;
|
|
|
-}
|
|
|
-
|
|
|
-struct kern_ipc_perm *ipc_lock_check_down(struct ipc_ids *ids, int id)
|
|
|
-{
|
|
|
- struct kern_ipc_perm *out;
|
|
|
-
|
|
|
- out = ipc_lock_down(ids, id);
|
|
|
- if (IS_ERR(out))
|
|
|
- return out;
|
|
|
-
|
|
|
- if (ipc_checkid(out, id)) {
|
|
|
- ipc_unlock(out);
|
|
|
- return ERR_PTR(-EIDRM);
|
|
|
- }
|
|
|
-
|
|
|
- return out;
|
|
|
-}
|
|
|
-
|
|
|
struct kern_ipc_perm *ipc_lock_check(struct ipc_ids *ids, int id)
|
|
|
{
|
|
|
struct kern_ipc_perm *out;
|
|
@@ -837,7 +787,7 @@ struct kern_ipc_perm *ipcctl_pre_down(struct ipc_ids *ids, int id, int cmd,
|
|
|
int err;
|
|
|
|
|
|
down_write(&ids->rw_mutex);
|
|
|
- ipcp = ipc_lock_check_down(ids, id);
|
|
|
+ ipcp = ipc_lock_check(ids, id);
|
|
|
if (IS_ERR(ipcp)) {
|
|
|
err = PTR_ERR(ipcp);
|
|
|
goto out_up;
|