For CONFIG_LBD=n case it was passing a u32 into do_div(). drivers/block/as-iosched.c | 7 ++++--- include/linux/blkdev.h | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff -puN drivers/block/as-iosched.c~as-do_div-fix drivers/block/as-iosched.c --- 25/drivers/block/as-iosched.c~as-do_div-fix 2003-07-14 19:29:10.000000000 -0700 +++ 25-akpm/drivers/block/as-iosched.c 2003-07-14 19:29:50.000000000 -0700 @@ -834,10 +834,11 @@ static void as_update_iohist(struct as_i + 2*1024*64); aic->seek_samples += 256; - aic->seek_total += 256*seek_dist; + aic->seek_total += (u64)256*seek_dist; if (aic->seek_samples) { - aic->seek_mean = aic->seek_total + 128; - sector_div(aic->seek_mean, aic->seek_samples); + u64 total = aic->seek_total + (aic->seek_samples>>1); + do_div(total, aic->seek_samples); + aic->seek_mean = (sector_t)total; } aic->seek_samples = (aic->seek_samples>>1) + (aic->seek_samples>>2); diff -puN include/linux/blkdev.h~as-do_div-fix include/linux/blkdev.h --- 25/include/linux/blkdev.h~as-do_div-fix 2003-07-14 19:29:10.000000000 -0700 +++ 25-akpm/include/linux/blkdev.h 2003-07-14 19:29:10.000000000 -0700 @@ -44,9 +44,9 @@ struct as_io_context { unsigned long ttime_samples; unsigned long ttime_mean; /* Layout pattern */ - long seek_samples; + unsigned int seek_samples; sector_t last_request_pos; - sector_t seek_total; + u64 seek_total; sector_t seek_mean; }; _