diff options
| author | Tsutomu Itoh <t-itoh@jp.fujitsu.com> | 2011-04-28 09:10:23 +0000 | 
|---|---|---|
| committer | Chris Mason <chris.mason@oracle.com> | 2011-05-23 13:24:40 -0400 | 
| commit | c00e9493f1412621c8665a707d63e32b0768f572 (patch) | |
| tree | 60e7b26ea4e6ff0b3270edc2abecdbacc4b211dc /fs/btrfs/tree-log.c | |
| parent | 1cd307990d6e2b4965620e339a92e0d7ae853e13 (diff) | |
| download | olio-linux-3.10-c00e9493f1412621c8665a707d63e32b0768f572.tar.xz olio-linux-3.10-c00e9493f1412621c8665a707d63e32b0768f572.zip  | |
Btrfs: return error to caller if read_one_inode() fails
When read_one_inode() fails, error code is returned to caller instead
of BUG_ON().
Signed-off-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/tree-log.c')
| -rw-r--r-- | fs/btrfs/tree-log.c | 24 | 
1 files changed, 18 insertions, 6 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 0350147106d..46b7b57650a 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -677,7 +677,10 @@ static noinline int drop_one_dir_item(struct btrfs_trans_handle *trans,  	btrfs_release_path(root, 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); @@ -816,7 +819,10 @@ static noinline int add_inode_ref(struct btrfs_trans_handle *trans,  		return -ENOENT;  	inode = read_one_inode(root, key->objectid); -	BUG_ON(!inode); +	if (!inode) { +		iput(dir); +		return -EIO; +	}  	ref_ptr = btrfs_item_ptr_offset(eb, slot);  	ref_end = ref_ptr + btrfs_item_size_nr(eb, slot); @@ -1054,7 +1060,8 @@ static noinline int fixup_inode_link_counts(struct btrfs_trans_handle *trans,  		btrfs_release_path(root, 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); @@ -1090,7 +1097,8 @@ static noinline int link_to_fixup_dir(struct btrfs_trans_handle *trans,  	struct inode *inode;  	inode = read_one_inode(root, objectid); -	BUG_ON(!inode); +	if (!inode) +		return -EIO;  	key.objectid = BTRFS_TREE_LOG_FIXUP_OBJECTID;  	btrfs_set_key_type(&key, BTRFS_ORPHAN_ITEM_KEY); @@ -1177,7 +1185,8 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans,  	int ret;  	dir = read_one_inode(root, key->objectid); -	BUG_ON(!dir); +	if (!dir) +		return -EIO;  	name_len = btrfs_dir_name_len(eb, di);  	name = kmalloc(name_len, GFP_NOFS); @@ -1433,7 +1442,10 @@ again:  			btrfs_release_path(root, path);  			btrfs_release_path(log, 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);  |