summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libdiskfs/ChangeLog4
-rw-r--r--libdiskfs/dir-lookup.c10
2 files changed, 12 insertions, 2 deletions
diff --git a/libdiskfs/ChangeLog b/libdiskfs/ChangeLog
index 38fd608a..134468b5 100644
--- a/libdiskfs/ChangeLog
+++ b/libdiskfs/ChangeLog
@@ -1,3 +1,7 @@
+2008-06-06 Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+ * dir-lookup.c (diskfs_S_dir_lookup): Unlock np in case of errors.
+
2007-11-15 Samuel Thibault <samuel.thibault@ens-lyon.org>
* dir-rename.c (diskfs_S_dir_rename): Call diskfs_nput (tnp) in
diff --git a/libdiskfs/dir-lookup.c b/libdiskfs/dir-lookup.c
index 56c9587e..70a0ab3c 100644
--- a/libdiskfs/dir-lookup.c
+++ b/libdiskfs/dir-lookup.c
@@ -463,7 +463,10 @@ diskfs_S_dir_lookup (struct protid *dircred,
{
error = diskfs_create_protid (newpo, dircred->user, &newpi);
if (error)
- diskfs_release_peropen (newpo);
+ {
+ mutex_unlock(&np->lock);
+ diskfs_release_peropen (newpo);
+ }
}
if (! error)
@@ -475,7 +478,10 @@ diskfs_S_dir_lookup (struct protid *dircred,
error = fshelp_acquire_lock (&np->userlock, &newpi->po->lock_status,
&np->lock, LOCK_SH);
if (error)
- ports_port_deref (newpi); /* Get rid of NEWPI. */
+ {
+ mutex_unlock(&np->lock);
+ ports_port_deref (newpi); /* Get rid of NEWPI. */
+ }
}
if (! error)