Le vendredi 16 juillet 2010 à 18:07 +0530, Nitin Gupta a écrit : > This particular patch implemets basic functionality only: > +static u64 zcache_get_stat(struct zcache_pool *zpool, > + enum zcache_pool_stats_index idx) > +{ > + int cpu; > + s64 val = 0; > + > + for_each_possible_cpu(cpu) { > + unsigned int start; > + struct zcache_pool_stats_cpu *stats; > + > + stats = per_cpu_ptr(zpool->stats, cpu); > + do { > + start = u64_stats_fetch_begin(&stats->syncp); > + val += stats->count[idx]; > + } while (u64_stats_fetch_retry(&stats->syncp, start)); > + } > + > + BUG_ON(val < 0); > + return val; > +} Sorry this is wrong. Inside the fetch/retry block you should not do the addition to val, only a read of value to a temporary variable, since this might be done several times. You want something like : static u64 zcache_get_stat(struct zcache_pool *zpool, enum zcache_pool_stats_index idx) { int cpu; s64 temp, val = 0; for_each_possible_cpu(cpu) { unsigned int start; struct zcache_pool_stats_cpu *stats; stats = per_cpu_ptr(zpool->stats, cpu); do { start = u64_stats_fetch_begin(&stats->syncp); temp = stats->count[idx]; } while (u64_stats_fetch_retry(&stats->syncp, start)); val += temp; } ... } -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>