[PATCH 1/1] mktree: long is bigger on 64-bit

Serge E. Hallyn serue at us.ibm.com
Wed May 13 05:57:19 PDT 2009


Quoting Matt Helsley (matthltc at us.ibm.com):
> On Tue, May 12, 2009 at 10:08:30PM -0500, Serge E. Hallyn wrote:
> > mktree's hash function assumes that long is 32 bits.  Fix.
> > 
> > Signed-off-by: Serge Hallyn <serue at us.ibm.com>
> > ---
> >  mktree.c |    6 ++++--
> >  1 files changed, 4 insertions(+), 2 deletions(-)
> > 
> > diff --git a/mktree.c b/mktree.c
> > index 7a8cecc..0195974 100644
> > --- a/mktree.c
> > +++ b/mktree.c
> > @@ -724,6 +724,7 @@ static int ckpt_make_tree(struct ckpt_ctx *ctx, struct task *task)
> >  	struct task *child;
> >  	struct pid_swap swap;
> >  	pid_t newpid;
> > +	int status;
> >  	int ret;
> > 
> >  	ckpt_dbg("pid %d: pid %d sid %d parent %d\n",
> > @@ -765,7 +766,7 @@ static int ckpt_make_tree(struct ckpt_ctx *ctx, struct task *task)
> >  	/* 3rd pass: bring out your deads ... */
> >  	for (child = task->children; child; child = child->next_sib) {
> >  		if (child->flags & TASK_DEAD) {
> > -			ret = waitpid(child->rpid, NULL, 0);
> > +			ret = waitpid(child->rpid, &status, 0);
> >  			if (ret < 0) {
> >  				perror("waitpid");
> >  				return -1;
> > @@ -1291,7 +1292,8 @@ static void hash_exit(struct ckpt_ctx *ctx)
> >  static inline int hash_func(long key)
> >  {
> >  	unsigned long hash = key * GOLDEN_RATIO_PRIME_32;
> > -	return (hash >> (32 - HASH_BITS));
> > +	//return (hash >> (32 - HASH_BITS));
> > +	return (hash >> (sizeof(long)*8 - HASH_BITS));
> 
> I'm guessing the // comment isn't intentional. Also, how about using sizeof(key)
> instead of manually inserting its type?

Uh, yeah, the other two hunks weren't intentional either.  Crappy patch.
But it still lets mktree work on 64-bit :)

-serge


More information about the Containers mailing list