Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 128731
b: refs/heads/master
c: 0afbaf8
h: refs/heads/master
i:
  128729: c5ac26e
  128727: 7088a15
v: v3
  • Loading branch information
Chris Mason committed Sep 25, 2008
1 parent 325b421 commit 6246454
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a40a90a0420abd5ff86a0917facd3293ebb6a9b6
refs/heads/master: 0afbaf8c8216a0de64b55c2d455de2b6c9dde5eb
33 changes: 26 additions & 7 deletions trunk/fs/btrfs/disk-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,19 +88,35 @@ struct extent_map *btree_get_extent(struct inode *inode, struct page *page,
goto out;
}
em->start = 0;
em->len = i_size_read(inode);
em->len = (u64)-1;
em->block_start = 0;
em->bdev = inode->i_sb->s_bdev;

spin_lock(&em_tree->lock);
ret = add_extent_mapping(em_tree, em);
if (ret == -EEXIST) {
u64 failed_start = em->start;
u64 failed_len = em->len;

printk("failed to insert %Lu %Lu -> %Lu into tree\n",
em->start, em->len, em->block_start);
free_extent_map(em);
em = lookup_extent_mapping(em_tree, start, len);
if (em)
if (em) {
printk("after failing, found %Lu %Lu %Lu\n",
em->start, em->len, em->block_start);
ret = 0;
else
} else {
em = lookup_extent_mapping(em_tree, failed_start,
failed_len);
if (em) {
printk("double failure lookup gives us "
"%Lu %Lu -> %Lu\n", em->start,
em->len, em->block_start);
free_extent_map(em);
}
ret = -EIO;
}
} else if (ret) {
free_extent_map(em);
em = NULL;
Expand Down Expand Up @@ -1108,7 +1124,13 @@ struct btrfs_root *open_ctree(struct super_block *sb,
fs_info->btree_inode = new_inode(sb);
fs_info->btree_inode->i_ino = 1;
fs_info->btree_inode->i_nlink = 1;
fs_info->btree_inode->i_size = sb->s_bdev->bd_inode->i_size;

/*
* we set the i_size on the btree inode to the max possible int.
* the real end of the address space is determined by all of
* the devices in the system
*/
fs_info->btree_inode->i_size = OFFSET_MAX;
fs_info->btree_inode->i_mapping->a_ops = &btree_aops;
fs_info->btree_inode->i_mapping->backing_dev_info = &fs_info->bdi;

Expand Down Expand Up @@ -1196,9 +1218,6 @@ struct btrfs_root *open_ctree(struct super_block *sb,
tree_root->stripesize = stripesize;
sb_set_blocksize(sb, sectorsize);

i_size_write(fs_info->btree_inode,
btrfs_super_total_bytes(disk_super));

if (strncmp((char *)(&disk_super->magic), BTRFS_MAGIC,
sizeof(disk_super->magic))) {
printk("btrfs: valid FS not found on %s\n", sb->s_id);
Expand Down

0 comments on commit 6246454

Please sign in to comment.