Skip to content

Commit

Permalink
Btrfs: KM_IRQ0 usage in end_io handling
Browse files Browse the repository at this point in the history
endio handling is typically called with interrupts disabled, but can
also be called with it enabled. So save interrupts before using KM_IRQ0
to be completely safe.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Jens Axboe authored and Chris Mason committed Sep 25, 2008
1 parent 0a2118d commit bbf0d00
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,10 @@ int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end)
int ret;
struct btrfs_root *root = BTRFS_I(inode)->root;
u32 csum = ~(u32)0;
unsigned long flags;

ret = get_state_private(em_tree, start, &private);
local_irq_save(flags);
kaddr = kmap_atomic(page, KM_IRQ0);
if (ret) {
goto zeroit;
Expand All @@ -180,6 +182,7 @@ int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end)
goto zeroit;
}
kunmap_atomic(kaddr, KM_IRQ0);
local_irq_restore(flags);
return 0;

zeroit:
Expand All @@ -188,6 +191,7 @@ int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end)
memset(kaddr + offset, 1, end - start + 1);
flush_dcache_page(page);
kunmap_atomic(kaddr, KM_IRQ0);
local_irq_restore(flags);
return 0;
}

Expand Down

0 comments on commit bbf0d00

Please sign in to comment.