From: Anton Blanchard Date: Fri, 1 Oct 2010 21:19:55 +0000 (-0700) Subject: Staging: zram: work around oops due to startup ordering snafu X-Git-Tag: upstream/snapshot3+hdmi~12602^2~3^2~363 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7e24cce38a99f373450db67bf576fe73e8168d66;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git Staging: zram: work around oops due to startup ordering snafu I'm getting an oops when running mkfs on zram: NIP [d0000000030e0340] .zram_inc_stat+0x58/0x84 [zram] [c00000006d58f720] [d0000000030e091c] .zram_make_request+0xa8/0x6a0 [zram] [c00000006d58f840] [c00000000035795c] .generic_make_request+0x390/0x434 [c00000006d58f950] [c000000000357b14] .submit_bio+0x114/0x140 [c00000006d58fa20] [c000000000361778] .blkdev_issue_discard+0x1ac/0x250 [c00000006d58fb10] [c000000000361f68] .blkdev_ioctl+0x358/0x7fc [c00000006d58fbd0] [c0000000001c1c1c] .block_ioctl+0x6c/0x90 [c00000006d58fc70] [c0000000001984c4] .do_vfs_ioctl+0x660/0x6d4 [c00000006d58fd70] [c0000000001985a0] .SyS_ioctl+0x68/0xb0 Since disksize no longer starts as 0 it looks like we can call zram_make_request before the device has been initialised. The patch below fixes the immediate problem but this would go away if we move the initialisation function elsewhere (as suggested in another thread). Signed-off-by: Anton Blanchard Cc: Nitin Gupta Signed-off-by: Andrew Morton Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/zram/zram_drv.c b/drivers/staging/zram/zram_drv.c index c5f84ee..72f1b9c 100644 --- a/drivers/staging/zram/zram_drv.c +++ b/drivers/staging/zram/zram_drv.c @@ -435,6 +435,12 @@ static int zram_make_request(struct request_queue *queue, struct bio *bio) int ret = 0; struct zram *zram = queue->queuedata; + if (unlikely(!zram->init_done)) { + set_bit(BIO_UPTODATE, &bio->bi_flags); + bio_endio(bio, 0); + return 0; + } + if (!valid_io_request(zram, bio)) { zram_stat64_inc(zram, &zram->stats.invalid_io); bio_io_error(bio);