Skip to contentSkip to conversation

reiser4: fix handling ENOSPC cryptcompress

PATCH New Edward Shishkin 1 participant 1 message Apr 25, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 reiser4: fix handling ENOSPC cryptcompress

Andrew, these bugs were caught when testing
reiser4 on a small partition. Please, apply.

Thanks,
Edward.

Problem:
Processes fall into infinite loop
when running in no-space-left-on-device situation.

Fixup:
Fixed leak of checkin_mutex in do_write_cryptcompress();

---
 linux-2.6.25-mm1/fs/reiser4/plugin/file/cryptcompress.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)
fs/reiser4/plugin/file/cryptcompress.c renamed from fs/reiser4/plugin/file/cryptcompress.c.orig +4 -3
@@ -2707,7 +2707,8 @@
 		if (result)
 			goto out;
 		if (cont->state == PSCHED_ASSIGNED_NEW)
-			goto out_no_release;
+			/* done_lh was called in write_pschedule_hook */
+			goto out_no_longterm_lock;
 
 		result = prepare_logical_cluster(inode, pos, count, &clust,
 						 LC_APPOV);
@@ -2779,9 +2780,9 @@
 	} while (count);
  out:
 	done_lh(&hint->lh);
-	mutex_unlock(&info->checkin_mutex);
 	save_file_hint(file, hint);
- out_no_release:
+ out_no_longterm_lock:
+	mutex_unlock(&info->checkin_mutex);
 	kfree(hint);
 	put_cluster_handle(&clust);
 	assert("edward-195",