Skip to content

Commit

Permalink
Staging: zram: initialize device on first read
Browse files Browse the repository at this point in the history
Currently the device is initialized when first write is done to the
device. Any read attempt before the first write would fail, including
"hidden" read the user may not know about (as for example if he tries
to write a partial block).

This patch initializes the device on first request, whether read or
write.

Signed-off-by: Jerome Marchand <[email protected]>
Cc: Nitin Gupta <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
jeromemarchand authored and gregkh committed Feb 18, 2011
1 parent 69648be commit 6642a67
Showing 1 changed file with 7 additions and 12 deletions.
19 changes: 7 additions & 12 deletions drivers/staging/zram/zram_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -211,11 +211,6 @@ static void zram_read(struct zram *zram, struct bio *bio)
u32 index;
struct bio_vec *bvec;

if (unlikely(!zram->init_done)) {
bio_endio(bio, -ENXIO);
return;
}

zram_stat64_inc(zram, &zram->stats.num_reads);
index = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT;

Expand Down Expand Up @@ -286,20 +281,15 @@ static void zram_read(struct zram *zram, struct bio *bio)

static void zram_write(struct zram *zram, struct bio *bio)
{
int i, ret;
int i;
u32 index;
struct bio_vec *bvec;

if (unlikely(!zram->init_done)) {
ret = zram_init_device(zram);
if (ret)
goto out;
}

zram_stat64_inc(zram, &zram->stats.num_writes);
index = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT;

bio_for_each_segment(bvec, bio, i) {
int ret;
u32 offset;
size_t clen;
struct zobj_header *zheader;
Expand Down Expand Up @@ -445,6 +435,11 @@ static int zram_make_request(struct request_queue *queue, struct bio *bio)
return 0;
}

if (unlikely(!zram->init_done) && zram_init_device(zram)) {
bio_io_error(bio);
return 0;
}

switch (bio_data_dir(bio)) {
case READ:
zram_read(zram, bio);
Expand Down

0 comments on commit 6642a67

Please sign in to comment.