Browse Source

Btrfs: Don't use kmap_atomic(..., KM_IRQ0) during checksum verifies

Checksum verification happens in a helper thread, and there is no
need to mess with interrupts.  This switches to kmap() instead.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Chris Mason 16 years ago
parent
commit
cc7172defc
1 changed files with 3 additions and 7 deletions
  1. 3 7
      fs/btrfs/inode.c

+ 3 - 7
fs/btrfs/inode.c

@@ -1727,7 +1727,6 @@ static 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;
 
 	if (PageChecked(page)) {
 		ClearPageChecked(page);
@@ -1749,8 +1748,7 @@ static int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end,
 	} else {
 		ret = get_state_private(io_tree, start, &private);
 	}
-	local_irq_save(flags);
-	kaddr = kmap_atomic(page, KM_IRQ0);
+	kaddr = kmap(page);
 	if (ret)
 		goto zeroit;
 
@@ -1759,8 +1757,7 @@ static int btrfs_readpage_end_io_hook(struct page *page, u64 start, u64 end,
 	if (csum != private)
 		goto zeroit;
 
-	kunmap_atomic(kaddr, KM_IRQ0);
-	local_irq_restore(flags);
+	kunmap(page);
 good:
 	/* if the io failure tree for this inode is non-empty,
 	 * check to see if we've recovered from a failed IO
@@ -1775,8 +1772,7 @@ zeroit:
 	       (unsigned long long)private);
 	memset(kaddr + offset, 1, end - start + 1);
 	flush_dcache_page(page);
-	kunmap_atomic(kaddr, KM_IRQ0);
-	local_irq_restore(flags);
+	kunmap(page);
 	if (private == 0)
 		return 0;
 	return -EIO;