X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;f=lib%2Fscatterlist.c;h=b7b449dafbe5abb59fe06982e337cb31c6a7eaeb;hb=a3307eaf1390bd5dbe36de6116a1ce73a4c61cfa;hp=876ba6d5b6704921866d25cc47b899a045fbe6c3;hpb=5061bcd119547453b32c847d2b9490a052bc1755;p=linux-2.6-omap-h63xx.git diff --git a/lib/scatterlist.c b/lib/scatterlist.c index 876ba6d5b67..b7b449dafbe 100644 --- a/lib/scatterlist.c +++ b/lib/scatterlist.c @@ -395,7 +395,7 @@ void sg_miter_stop(struct sg_mapping_iter *miter) WARN_ON(!irqs_disabled()); kunmap_atomic(miter->addr, KM_BIO_SRC_IRQ); } else - kunmap(miter->addr); + kunmap(miter->page); miter->page = NULL; miter->addr = NULL; @@ -422,9 +422,12 @@ static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, { unsigned int offset = 0; struct sg_mapping_iter miter; + unsigned long flags; sg_miter_start(&miter, sgl, nents, SG_MITER_ATOMIC); + local_irq_save(flags); + while (sg_miter_next(&miter) && offset < buflen) { unsigned int len; @@ -442,6 +445,7 @@ static size_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, sg_miter_stop(&miter); + local_irq_restore(flags); return offset; }