From 445f1b17339f46853e985191abfbc3f09f065cd8 Mon Sep 17 00:00:00 2001 From: Dmitry Monakhov Date: Mon, 18 Mar 2013 11:40:19 -0400 Subject: [PATCH] --- yaml --- r: 361599 b: refs/heads/master c: 0e401101db49959f5783f6ee9e676124b5a183ac h: refs/heads/master i: 361597: 3af2816fad111337d00b1a02344c2e9d3b127359 361595: 43666f5c6ee8da5c6c3eb81e3d5e14487340af30 361591: 55a85b6caf6f533e0fdd56ccb3becce84558c8c4 361583: 2bd4fcb0ec72221625294ea92f8ecdb9ba77a2e0 361567: d309508331f5fc824eaff2bb176615b164b786e8 361535: 79934aced2ea66334d6d5ebb31cd1ffcebb57383 361471: 5fc232c44baafe1aa5b2066f003b8d240eb57e20 v: v3 --- [refs] | 2 +- trunk/fs/ext4/move_extent.c | 35 +++++++++++++++++++---------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index 9f1e3d873d37..0a0ac787ecc8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4f42f80a8f08d4c3f52c4267361241885d5dee3a +refs/heads/master: 0e401101db49959f5783f6ee9e676124b5a183ac diff --git a/trunk/fs/ext4/move_extent.c b/trunk/fs/ext4/move_extent.c index c1f15b203e98..bbae4ed15c3d 100644 --- a/trunk/fs/ext4/move_extent.c +++ b/trunk/fs/ext4/move_extent.c @@ -32,16 +32,18 @@ */ static inline int get_ext_path(struct inode *inode, ext4_lblk_t lblock, - struct ext4_ext_path **path) + struct ext4_ext_path **orig_path) { int ret = 0; + struct ext4_ext_path *path; - *path = ext4_ext_find_extent(inode, lblock, *path); - if (IS_ERR(*path)) { - ret = PTR_ERR(*path); - *path = NULL; - } else if ((*path)[ext_depth(inode)].p_ext == NULL) + path = ext4_ext_find_extent(inode, lblock, *orig_path); + if (IS_ERR(path)) + ret = PTR_ERR(path); + else if (path[ext_depth(inode)].p_ext == NULL) ret = -ENODATA; + else + *orig_path = path; return ret; } @@ -611,24 +613,25 @@ mext_check_coverage(struct inode *inode, ext4_lblk_t from, ext4_lblk_t count, { struct ext4_ext_path *path = NULL; struct ext4_extent *ext; + int ret = 0; ext4_lblk_t last = from + count; while (from < last) { *err = get_ext_path(inode, from, &path); if (*err) - return 0; + goto out; ext = path[ext_depth(inode)].p_ext; - if (!ext) { - ext4_ext_drop_refs(path); - return 0; - } - if (uninit != ext4_ext_is_uninitialized(ext)) { - ext4_ext_drop_refs(path); - return 0; - } + if (uninit != ext4_ext_is_uninitialized(ext)) + goto out; from += ext4_ext_get_actual_len(ext); ext4_ext_drop_refs(path); } - return 1; + ret = 1; +out: + if (path) { + ext4_ext_drop_refs(path); + kfree(path); + } + return ret; } /**