Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision 9c96634956b80aafcc5328e99766a340e7dc12d5)
+++ uspace/srv/fs/fat/fat_ops.c	(revision fec333b34757b0ab4e68ee81582f355cfa664e93)
@@ -499,20 +499,15 @@
 		/* populate the new cluster with unused dentries */
 		rc = fat_zero_cluster(bs, service_id, mcl);
-		if (rc != EOK) {
-			(void) fat_free_clusters(bs, service_id, mcl);
-			return rc;
-		}
+		if (rc != EOK)
+			goto error;
 	}
 
 	rc = fat_node_get_new(&nodep);
-	if (rc != EOK) {
-		(void) fat_free_clusters(bs, service_id, mcl);
-		return rc;
-	}
+	if (rc != EOK)
+		goto error;
 	rc = fat_idx_get_new(&idxp, service_id);
 	if (rc != EOK) {
-		(void) fat_free_clusters(bs, service_id, mcl);	
 		(void) fat_node_put(FS_NODE(nodep));
-		return rc;
+		goto error;
 	}
 	/* idxp->lock held */
@@ -536,4 +531,9 @@
 	*rfn = FS_NODE(nodep);
 	return EOK;
+
+error:
+	if (flags & L_DIRECTORY)
+		(void) fat_free_clusters(bs, service_id, mcl);
+	return rc;		
 }
 
