diff options
author | Christoph Hellwig <hch@lst.de> | 2018-05-09 15:59:47 +0200 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2018-05-11 15:08:01 -0600 |
commit | 37a5b5c61892298b37c684b43cfcde757dd54edf (patch) | |
tree | 18dd92baff6665a44656c0fb86daab91dc176311 /drivers/sbus | |
parent | ad180f6f718527ab0d6d82b905486b219cdd2263 (diff) | |
download | talos-obmc-linux-37a5b5c61892298b37c684b43cfcde757dd54edf.tar.gz talos-obmc-linux-37a5b5c61892298b37c684b43cfcde757dd54edf.zip |
jsflash: handle highmem pages
Just kmap the bio single page payload before processing it.
(and yes, now highmem on sparc32 anyway, but kmap_(un)map atomic are nops,
so this gives the right example)
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/sbus')
-rw-r--r-- | drivers/sbus/char/jsflash.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/sbus/char/jsflash.c b/drivers/sbus/char/jsflash.c index 14f377ac1280..8520587b8d09 100644 --- a/drivers/sbus/char/jsflash.c +++ b/drivers/sbus/char/jsflash.c @@ -215,6 +215,7 @@ static void jsfd_request(void) unsigned long offset = blk_rq_pos(req) << 9; size_t len = blk_rq_cur_bytes(req); blk_status_t err = BLK_STS_IOERR; + void *p; if ((offset + len) > jdp->dsize) goto end; @@ -229,7 +230,9 @@ static void jsfd_request(void) goto end; } - jsfd_read(bio_data(req->bio), jdp->dbase + offset, len); + p = kmap_atomic(bio_page(bio)) + bio_offset(bio); + jsfd_read(p, jdp->dbase + offset, len); + kunmap_atomic(p); err = BLK_STS_OK; end: if (!__blk_end_request_cur(req, err)) @@ -592,7 +595,6 @@ static int jsfd_init(void) put_disk(disk); goto out; } - blk_queue_bounce_limit(disk->queue, BLK_BOUNCE_HIGH); jsfd_disk[i] = disk; } |