On 08/18/2014 04:14 PM, Ivan Shapovalov wrote:
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)
OK
--
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