[btrfs-devel][patch]a few cleanup for inode.c
Yan Zheng
yanzheng at 21cn.com
Thu Sep 20 07:39:07 PDT 2007
Hello,
These changes are related to lock release when the error occurs.
Regards
YZ
diff -r 24c661119092 inode.c
--- a/inode.c Mon Sep 17 11:25:58 2007 -0400
+++ b/inode.c Thu Sep 20 22:06:04 2007 +0800
@@ -684,7 +684,7 @@ static int btrfs_truncate_page(struct ad
u64 page_start;
if ((offset & (blocksize - 1)) == 0)
- goto out;
+ return 0;
down_read(&BTRFS_I(inode)->root->snap_sem);
ret = -ENOMEM;
@@ -696,17 +696,17 @@ static int btrfs_truncate_page(struct ad
lock_page(page);
if (!PageUptodate(page)) {
ret = -EIO;
- goto out;
+ goto out_unlock;
}
}
page_start = page->index << PAGE_CACHE_SHIFT;
ret = btrfs_cow_one_page(inode, page, offset);
-
+out_unlock:
unlock_page(page);
page_cache_release(page);
+out:
up_read(&BTRFS_I(inode)->root->snap_sem);
-out:
return ret;
}
@@ -838,6 +838,7 @@ static int fixup_tree_root_location(stru
{
struct btrfs_path *path;
struct btrfs_root_item *ri;
+ int ret = 0;
if (btrfs_key_type(location) != BTRFS_ROOT_ITEM_KEY)
return 0;
@@ -851,18 +852,20 @@ static int fixup_tree_root_location(stru
*sub_root = btrfs_read_fs_root(root->fs_info, location,
dentry->d_name.name,
dentry->d_name.len);
- if (IS_ERR(*sub_root))
- return PTR_ERR(*sub_root);
+ if (IS_ERR(*sub_root)) {
+ ret = PTR_ERR(*sub_root);
+ goto out;
+ }
ri = &(*sub_root)->root_item;
location->objectid = btrfs_root_dirid(ri);
location->flags = 0;
btrfs_set_key_type(location, BTRFS_INODE_ITEM_KEY);
location->offset = 0;
-
+out:
btrfs_free_path(path);
mutex_unlock(&root->fs_info->fs_mutex);
- return 0;
+ return ret;
}
static int btrfs_init_locked_inode(struct inode *inode, void *p)
More information about the Btrfs-devel
mailing list