return ret;
 }
 
-/**
- * efi_capsule_flush - called by file close or file flush
- * @file: file pointer
- * @id: not used
- *
- *     If a capsule is being partially uploaded then calling this function
- *     will be treated as upload termination and will free those completed
- *     buffer pages and -ECANCELED will be returned.
- **/
-static int efi_capsule_flush(struct file *file, fl_owner_t id)
-{
-       int ret = 0;
-       struct capsule_info *cap_info = file->private_data;
-
-       if (cap_info->index > 0) {
-               pr_err("capsule upload not complete\n");
-               efi_free_all_buff_pages(cap_info);
-               ret = -ECANCELED;
-       }
-
-       return ret;
-}
-
 /**
  * efi_capsule_release - called by file close
  * @inode: not used
 {
        struct capsule_info *cap_info = file->private_data;
 
+       if (cap_info->index > 0 &&
+           (cap_info->header.headersize == 0 ||
+            cap_info->count < cap_info->total_size)) {
+               pr_err("capsule upload not complete\n");
+               efi_free_all_buff_pages(cap_info);
+       }
+
        kfree(cap_info->pages);
        kfree(cap_info->phys);
        kfree(file->private_data);
        .owner = THIS_MODULE,
        .open = efi_capsule_open,
        .write = efi_capsule_write,
-       .flush = efi_capsule_flush,
        .release = efi_capsule_release,
        .llseek = no_llseek,
 };