In case of error in reiser4_grab_space(), return the original error code, not -ENOSPC unconditionally. Signed-off-by: Ivan Shapovalov <intelfx100@xxxxxxxxx> --- fs/reiser4/block_alloc.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/fs/reiser4/block_alloc.c b/fs/reiser4/block_alloc.c index 324b11c..7f9f910 100644 --- a/fs/reiser4/block_alloc.c +++ b/fs/reiser4/block_alloc.c @@ -360,37 +360,40 @@ int reiser4_grab_reserved(struct super_block *super, __u64 count, reiser4_ba_flags_t flags) { reiser4_super_info_data *sbinfo = get_super_private(super); + int ret; assert("nikita-3175", flags & BA_CAN_COMMIT); /* Check the delete mutex already taken by us, we assume that * reading of machine word is atomic. */ if (sbinfo->delete_mutex_owner == current) { - if (reiser4_grab_space - (count, (flags | BA_RESERVED) & ~BA_CAN_COMMIT)) { + ret = reiser4_grab_space (count, (flags | BA_RESERVED) & ~BA_CAN_COMMIT); + + if (ret != 0) { warning("zam-1003", "nested call of grab_reserved fails count=(%llu)", (unsigned long long)count); reiser4_release_reserved(super); - return RETERR(-ENOSPC); } - return 0; - } + } else { + ret = reiser4_grab_space(count, flags); - if (reiser4_grab_space(count, flags)) { - mutex_lock(&sbinfo->delete_mutex); - assert("nikita-2929", sbinfo->delete_mutex_owner == NULL); - sbinfo->delete_mutex_owner = current; + if (ret != 0) { + mutex_lock(&sbinfo->delete_mutex); + assert("nikita-2929", sbinfo->delete_mutex_owner == NULL); + sbinfo->delete_mutex_owner = current; + ret = reiser4_grab_space(count, flags | BA_RESERVED); - if (reiser4_grab_space(count, flags | BA_RESERVED)) { - warning("zam-833", - "reserved space is not enough (%llu)", - (unsigned long long)count); - reiser4_release_reserved(super); - return RETERR(-ENOSPC); + if (ret != 0) { + warning("zam-833", + "reserved space is not enough (%llu)", + (unsigned long long)count); + reiser4_release_reserved(super); + } } } - return 0; + + return ret; } void reiser4_release_reserved(struct super_block *super) -- 2.0.4 -- To unsubscribe from this list: send the line "unsubscribe reiserfs-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html