Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision 7ece4247321da5929bedba5f4bc3477242c68586)
+++ uspace/srv/fs/fat/fat_ops.c	(revision 0be611b165e8500d2cab8cb84b16ef832e39bf4a)
@@ -604,6 +604,8 @@
 	bs = block_bb_get(parentp->idx->service_id);
 	rc = fat_directory_open(parentp, &di);
-	if (rc != EOK)
-		return rc;
+	if (rc != EOK) {
+		fibril_mutex_unlock(&parentp->idx->lock);
+		return rc;
+	}
 
 	/*
@@ -616,13 +618,16 @@
 
 	rc = fat_directory_write(&di, name, &de);
-	if (rc != EOK)
-		return rc;
+	if (rc != EOK) {
+		(void) fat_directory_close(&di);
+		fibril_mutex_unlock(&parentp->idx->lock);
+		return rc;
+	}
 	rc = fat_directory_close(&di);
-	if (rc != EOK)
-		return rc;
+	if (rc != EOK) {
+		fibril_mutex_unlock(&parentp->idx->lock);
+		return rc;
+	}
 
 	fibril_mutex_unlock(&parentp->idx->lock);
-	if (rc != EOK)
-		return rc;
 
 	fibril_mutex_lock(&childp->idx->lock);
