[PATCH] loop.c forgot a kmap

Benjamin LaHaise (bcrl@redhat.com)
Thu, 23 May 2002 23:20:25 -0400


The patch below fixes a bug in loop.c that causes highmem systems
to fail spectacularly when a page happens to be allocated in highmem
by replacing the use of page_address with a kmap/kunmap sequence.

-ben

-- 
"You will be reincarnated as a toad; and you will be much happier."

:r ~/patches/v2.4.19-pre8-loop-kmap.diff --- /md0/kernels/2.4/v2.4.19-pre8/drivers/block/loop.c Wed May 8 13:19:02 2002 +++ v2.4.19-pre8/drivers/block/loop.c Thu May 23 22:44:09 2002 @@ -199,9 +199,9 @@ page = grab_cache_page(mapping, index); if (!page) goto fail; + kaddr = kmap(page); if (aops->prepare_write(file, page, offset, offset+size)) goto unlock; - kaddr = page_address(page); flush_dcache_page(page); transfer_result = lo_do_transfer(lo, WRITE, kaddr + offset, data, size, IV); if (transfer_result) { @@ -216,6 +216,7 @@ goto unlock; if (transfer_result) goto unlock; + kunmap(page); data += size; len -= size; offset = 0; @@ -228,6 +229,7 @@ return 0; unlock: + kunmap(page); UnlockPage(page); page_cache_release(page); fail: - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/