lkml.org 
[lkml]   [2008]   [Oct]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[patch 26/71] sg: disable interrupts inside sg_copy_buffer
2.6.26-stable review patch.  If anyone has any objections, please let us
know.

------------------
From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>

This is the backport of the upstream commit 50bed2e2862a8f3a4f7d683d0d27292e71ef18b9

The callers of sg_copy_buffer must disable interrupts before calling
it (since it uses kmap_atomic). Some callers use it on
interrupt-disabled code but some need to take the trouble to disable
interrupts just for this. No wonder they forget about it and we hit a
bug like:

http://bugzilla.kernel.org/show_bug.cgi?id=11529

James said that it might be better to disable interrupts inside the
function rather than risk the callers getting it wrong.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
lib/scatterlist.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

--- a/lib/scatterlist.c
+++ b/lib/scatterlist.c
@@ -312,8 +312,9 @@ static size_t sg_copy_buffer(struct scat
struct scatterlist *sg;
size_t buf_off = 0;
int i;
+ unsigned long flags;

- WARN_ON(!irqs_disabled());
+ local_irq_save(flags);

for_each_sg(sgl, sg, nents, i) {
struct page *page;
@@ -358,6 +359,8 @@ static size_t sg_copy_buffer(struct scat
break;
}

+ local_irq_restore(flags);
+
return buf_off;
}

--


\
 
 \ /
  Last update: 2008-10-07 02:53    [W:0.665 / U:0.032 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site