aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/inode.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 6228a304b547..dc8fb2b3a145 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2493,6 +2493,7 @@ static void btrfs_read_locked_inode(struct inode *inode)
2493 2493
2494 path = btrfs_alloc_path(); 2494 path = btrfs_alloc_path();
2495 BUG_ON(!path); 2495 BUG_ON(!path);
2496 path->leave_spinning = 1;
2496 memcpy(&location, &BTRFS_I(inode)->location, sizeof(location)); 2497 memcpy(&location, &BTRFS_I(inode)->location, sizeof(location));
2497 2498
2498 ret = btrfs_lookup_inode(NULL, root, path, &location, 0); 2499 ret = btrfs_lookup_inode(NULL, root, path, &location, 0);
@@ -2502,6 +2503,12 @@ static void btrfs_read_locked_inode(struct inode *inode)
2502 leaf = path->nodes[0]; 2503 leaf = path->nodes[0];
2503 inode_item = btrfs_item_ptr(leaf, path->slots[0], 2504 inode_item = btrfs_item_ptr(leaf, path->slots[0],
2504 struct btrfs_inode_item); 2505 struct btrfs_inode_item);
2506 if (!leaf->map_token)
2507 map_private_extent_buffer(leaf, (unsigned long)inode_item,
2508 sizeof(struct btrfs_inode_item),
2509 &leaf->map_token, &leaf->kaddr,
2510 &leaf->map_start, &leaf->map_len,
2511 KM_USER1);
2505 2512
2506 inode->i_mode = btrfs_inode_mode(leaf, inode_item); 2513 inode->i_mode = btrfs_inode_mode(leaf, inode_item);
2507 inode->i_nlink = btrfs_inode_nlink(leaf, inode_item); 2514 inode->i_nlink = btrfs_inode_nlink(leaf, inode_item);
@@ -2539,6 +2546,11 @@ static void btrfs_read_locked_inode(struct inode *inode)
2539 if (!maybe_acls) 2546 if (!maybe_acls)
2540 cache_no_acl(inode); 2547 cache_no_acl(inode);
2541 2548
2549 if (leaf->map_token) {
2550 unmap_extent_buffer(leaf, leaf->map_token, KM_USER1);
2551 leaf->map_token = NULL;
2552 }
2553
2542 btrfs_free_path(path); 2554 btrfs_free_path(path);
2543 inode_item = NULL; 2555 inode_item = NULL;
2544 2556