Re: [long]2.5.44-mm3 UP went into unexpected trashing

From: Dipankar Sarma (dipankar@in.ibm.com)
Date: Thu Oct 24 2002 - 10:31:05 EST


On Thu, Oct 24, 2002 at 06:08:09PM +0530, Dipankar Sarma wrote:
> On Thu, Oct 24, 2002 at 12:01:31PM +0000, Ed Tomlinson wrote:
> > Would this affect UP systems? Had the dentry leak on a UP box with 512m
> > memory. About 400m ended up in unfreeable dentries...
>
> It does affect UP systems.
>
> A quick look at /proc/rcu in a leaky system indicated that somehow
> despite having a batch of RCUs, they are not getting started.
>
> /* Fake initialization required by compiler */
> @@ -106,10 +106,11 @@ static void rcu_start_batch(long newbatc
> rcu_ctrlblk.maxbatch = newbatch;
> }
> if (rcu_batch_before(rcu_ctrlblk.maxbatch, rcu_ctrlblk.curbatch) ||
> - (rcu_ctrlblk.rcu_cpu_mask != 0)) {
> + (find_first_bit(rcu_ctrlblk.rcu_cpu_mask, NR_CPUS) != NR_CPUS)) {
> return;
> }
> - rcu_ctrlblk.rcu_cpu_mask = cpu_online_map;
> + memcpy(rcu_ctrlblk.rcu_cpu_mask, cpu_online_map,
> + sizeof(rcu_ctrlblk.rcu_cpu_mask));
> }
>
> Either find_first_bit() is not returning NR_CPUS when the bitmask has no
> bit set or memcpy is not working on the UP version of cpu_online_map. Will
> dig a little bit more.

OK, I think I know why this one didn't work.

If the bit_mask is 0, find_first_bit() returns 32 or BITS_PER_LONG.
That works fine as long as NR_CPUS is 32, but when it isn't things
are broken.

    (find_first_bit(rcu_ctrlblk.rcu_cpu_mask, NR_CPUS) != BITS_PER_LONG)) {
                return;

should probably work here.

I guess we need to audit all bitmask tests and fix them to check for
the right value.

Thanks

-- 
Dipankar Sarma  <dipankar@in.ibm.com> http://lse.sourceforge.net
Linux Technology Center, IBM Software Lab, Bangalore, India.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Oct 31 2002 - 22:00:23 EST