[Devel] Re: [RFC v14-rc2][PATCH 1/7] ipc: allow allocation of an ipc object with desired identifier
Serge E. Hallyn
serue at us.ibm.com
Thu Apr 2 10:22:33 PDT 2009
Quoting Oren Laadan (orenl at cs.columbia.edu):
> -int ipc_addid(struct ipc_ids* ids, struct kern_ipc_perm* new, int size)
> +int
> +ipc_addid(struct ipc_ids *ids, struct kern_ipc_perm *new, int size, int req_id)
> {
> uid_t euid;
> gid_t egid;
> + int lid = 0;
> int id, err;
>
> if (size > IPCMNI)
> @@ -268,28 +270,41 @@ int ipc_addid(struct ipc_ids* ids, struct kern_ipc_perm* new, int size)
> if (ids->in_use >= size)
> return -ENOSPC;
>
> + if (req_id >= 0)
> + lid = ipcid_to_idx(req_id);
> +
> spin_lock_init(&new->lock);
> new->deleted = 0;
> rcu_read_lock();
> spin_lock(&new->lock);
>
> - err = idr_get_new(&ids->ipcs_idr, new, &id);
> + err = idr_get_new_above(&ids->ipcs_idr, new, lid, &id);
> if (err) {
> spin_unlock(&new->lock);
> rcu_read_unlock();
> return err;
> }
>
> + if (req_id >= 0) {
> + if (id != lid) {
> + idr_remove(&ids->ipcs_idr, id);
> + spin_unlock(&new->lock);
> + rcu_read_unlock();
> + return -EBUSY;
> + }
> + new->seq = req_id / SEQ_MULTIPLIER;
Should this be
new->seq = req_id % ids->seq_max;
?
> + } else {
> + new->seq = ids->seq++;
> + if (ids->seq > ids->seq_max)
> + ids->seq = 0;
> + }
> +
> ids->in_use++;
>
> current_euid_egid(&euid, &egid);
> new->cuid = new->uid = euid;
> new->gid = new->cgid = egid;
>
> - new->seq = ids->seq++;
> - if(ids->seq > ids->seq_max)
> - ids->seq = 0;
> -
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list