Merge "platform: msm: pft: fix close all encrypted files"
diff --git a/drivers/platform/msm/pft.c b/drivers/platform/msm/pft.c
index 3b8da9c..6132ba3 100644
--- a/drivers/platform/msm/pft.c
+++ b/drivers/platform/msm/pft.c
@@ -726,6 +726,9 @@
 	bool is_inplace = false; /* N.A. */
 	int ret;
 
+	if (!pft_is_ready())
+		return true;
+
 	ret = pft_get_key_index(pft_bio_get_inode(bio1), &key_index1,
 				&is_encrypted1, &is_inplace);
 	if (ret)
@@ -1283,20 +1286,16 @@
 {
 	struct pft_file_info *tmp = NULL;
 	struct list_head *pos = NULL;
+	struct list_head *next = NULL;
 
-	mutex_lock(&pft_dev->lock);
-	list_for_each(pos, &pft_dev->open_file_list) {
+	list_for_each_safe(pos, next, &pft_dev->open_file_list) {
 		struct file *filp;
 		tmp = list_entry(pos, struct pft_file_info, list);
 		filp = tmp->file;
-		pr_debug("file %s\n is being closed",
-			 file_to_filename(filp));
-		pft_sync_file(filp);
+		pr_debug("closing file %s.\n", file_to_filename(filp));
+		/* filp_close() eventually calls pft_file_close() */
 		filp_close(filp, NULL);
-		list_del(&tmp->list);
-		kfree(tmp);
 	}
-	mutex_unlock(&pft_dev->lock);
 }
 
 /**