From: Chris Mason Date: Mon, 23 May 2011 18:37:47 +0000 (-0400) Subject: Merge branch 'cleanups_and_fixes' into inode_numbers X-Git-Tag: v3.0-rc1~38^2~5 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=d6c0cb379c5198487e4ac124728cbb2346d63b1f;p=~emulex%2Finfiniband.git Merge branch 'cleanups_and_fixes' into inode_numbers Conflicts: fs/btrfs/tree-log.c fs/btrfs/volumes.c Signed-off-by: Chris Mason --- d6c0cb379c5198487e4ac124728cbb2346d63b1f diff --cc fs/btrfs/file-item.c index b437cc790bf,fb9b02667e7..90d4ee52cd4 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c @@@ -638,11 -630,12 +637,12 @@@ int btrfs_del_csums(struct btrfs_trans_ if (key.offset < bytenr) break; } - btrfs_release_path(root, path); + btrfs_release_path(path); } + ret = 0; out: btrfs_free_path(path); - return 0; + return ret; } int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans, diff --cc fs/btrfs/tree-log.c index 0f5537e60bb,c2d88756640..592396c6dc4 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@@ -675,10 -675,13 +675,13 @@@ static noinline int drop_one_dir_item(s return -ENOMEM; read_extent_buffer(leaf, name, (unsigned long)(di + 1), name_len); - btrfs_release_path(root, path); + btrfs_release_path(path); inode = read_one_inode(root, location.objectid); - BUG_ON(!inode); + if (!inode) { + kfree(name); + return -EIO; + } ret = link_to_fixup_dir(trans, root, path, location.objectid); BUG_ON(ret); @@@ -1051,11 -1056,13 +1057,13 @@@ static noinline int fixup_inode_link_co break; ret = btrfs_del_item(trans, root, path); - BUG_ON(ret); + if (ret) + goto out; - btrfs_release_path(root, path); + btrfs_release_path(path); inode = read_one_inode(root, key.offset); - BUG_ON(!inode); + if (!inode) + return -EIO; ret = fixup_inode_link_count(trans, root, inode); BUG_ON(ret); @@@ -1069,8 -1076,10 +1077,10 @@@ */ key.offset = (u64)-1; } + ret = 0; + out: - btrfs_release_path(root, path); + btrfs_release_path(path); - return 0; + return ret; } @@@ -1427,12 -1438,15 +1439,15 @@@ again dir_key->offset, name, name_len, 0); } - if (!log_di || IS_ERR(log_di)) { + if (IS_ERR_OR_NULL(log_di)) { btrfs_dir_item_key_to_cpu(eb, di, &location); - btrfs_release_path(root, path); - btrfs_release_path(log, log_path); + btrfs_release_path(path); + btrfs_release_path(log_path); inode = read_one_inode(root, location.objectid); - BUG_ON(!inode); + if (!inode) { + kfree(name); + return -EIO; + } ret = link_to_fixup_dir(trans, root, path, location.objectid); @@@ -2589,10 -2602,11 +2604,11 @@@ static int drop_objectid_items(struct b break; ret = btrfs_del_item(trans, log, path); - BUG_ON(ret); + if (ret) + break; - btrfs_release_path(log, path); + btrfs_release_path(path); } - btrfs_release_path(log, path); + btrfs_release_path(path); return ret; } diff --cc fs/btrfs/volumes.h index 7c58a7b2d99,f1b2e4f53fc..7c12d61ae7a --- a/fs/btrfs/volumes.h +++ b/fs/btrfs/volumes.h @@@ -85,10 -85,9 +85,12 @@@ struct btrfs_device /* physical drive uuid (or lvm uuid) */ u8 uuid[BTRFS_UUID_SIZE]; + /* per-device scrub information */ + struct scrub_dev *scrub_device; + struct btrfs_work work; + struct rcu_head rcu; + struct work_struct rcu_work; }; struct btrfs_fs_devices {