[Devel] Re: [RFC v14][PATCH 10/54] Infrastructure for shared objects
Serge E. Hallyn
serue at us.ibm.com
Wed Apr 29 09:21:14 PDT 2009
Quoting Oren Laadan (orenl at cs.columbia.edu):
> +/**
> + * ckpt_obj_new - add an object to the obj_hash
> + * @ctx: checkpoint context
> + * @ptr: pointer to object
> + * @objref: object unique id
> + * @ops: object operations
> + *
> + * Returns: objref
> + *
> + * Add the object to the obj_hash. If @objref is zero, assign a unique
> + * object id and use @ptr as a hash key [checkpoint]. Else use @objref
> + * as a key [restart].
> + */
> +static int obj_new(struct ckpt_ctx *ctx, void *ptr, int objref,
> + struct ckpt_obj_ops *ops)
> +{
> + struct ckpt_obj *obj;
> + int i, ret;
> +
> + obj = kmalloc(sizeof(*obj), GFP_KERNEL);
> + if (!obj)
> + return -ENOMEM;
> +
> + obj->ptr = ptr;
> + obj->ops = ops;
> +
> + if (objref) {
> + /* use @obj->objref to index (restart) */
> + obj->objref = objref;
> + i = hash_long((unsigned long) objref, CKPT_OBJ_HASH_NBITS);
> + } else {
> + /* use @obj->ptr to index, assign objref (checkpoint) */
> + obj->objref = ctx->obj_hash->next_free_objref++;;
> + i = hash_long((unsigned long) ptr, CKPT_OBJ_HASH_NBITS);
> + }
> +
> + ret = ops->ref_grab(obj->ptr);
> + if (ret < 0)
> + kfree(obj);
> + else
> + hlist_add_head(&obj->hash, &ctx->obj_hash->head[i]);
> +
> + return (ret < 0 ? : obj->objref);
> +}
...
> +/**
> +* ckpt_obj_insert - add an object with a given objref to obj_hash
> +* @ctx: checkpoint context
> +* @ptr: pointer to object
> +* @objref: unique object id
> +* @type: object type
> +*
> +* Add the object pointer to by @ptr and identified by unique object id
> +* @objref to the hash table (indexed by @objref). Grab a reference to
> +* every object added, and maintain it until the entire hash is freed.
> +*/
> +
> +int ckpt_obj_insert(struct ckpt_ctx *ctx, void *ptr, int objref,
> + enum obj_type type)
> +{
> + struct ckpt_obj_ops *ops = &ckpt_obj_ops[type];
> +
> + ckpt_debug("%s objref %d\n", ops->obj_name, objref);
> + return (obj_new(ctx, ptr, objref, ops) ? : 1);
This line doesn't make sense - obj_new can't return 0 ?
Also, the line isn't in this patch, but when you add the
obj_mm_* to objhash.c, the comment right above it claims
/* inode object */
-serge
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list