Skip to content

Commit

Permalink
sg: disable interrupts inside sg_copy_buffer
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
fujita authored and Jens Axboe committed Sep 11, 2008
1 parent 2dc75d3 commit 50bed2e
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/scatterlist.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;
}

Expand Down

0 comments on commit 50bed2e

Please sign in to comment.