static struct usb_gadget_driver                fsg_driver;
 
 static void    close_backing_file(struct lun *curlun);
-static void    close_all_backing_files(struct fsg_dev *fsg);
 
 
 /*-------------------------------------------------------------------------*/
        fsg->thread_task = NULL;
        spin_unlock_irq(&fsg->lock);
 
-       /* In case we are exiting because of a signal, unregister the
-        * gadget driver and close the backing file. */
-       if (test_and_clear_bit(REGISTERED, &fsg->atomic_bitflags)) {
+       /* If we are exiting because of a signal, unregister the
+        * gadget driver. */
+       if (test_and_clear_bit(REGISTERED, &fsg->atomic_bitflags))
                usb_gadget_unregister_driver(&fsg_driver);
-               close_all_backing_files(fsg);
-       }
 
        /* Let the unbind and cleanup routines know the thread has exited */
        complete_and_exit(&fsg->thread_notifier, 0);
        }
 }
 
-static void close_all_backing_files(struct fsg_dev *fsg)
-{
-       int     i;
-
-       for (i = 0; i < fsg->nluns; ++i)
-               close_backing_file(&fsg->luns[i]);
-}
-
 
 static ssize_t show_ro(struct device *dev, struct device_attribute *attr, char *buf)
 {
                if (curlun->registered) {
                        device_remove_file(&curlun->dev, &dev_attr_ro);
                        device_remove_file(&curlun->dev, &dev_attr_file);
+                       close_backing_file(curlun);
                        device_unregister(&curlun->dev);
                        curlun->registered = 0;
                }
 out:
        fsg->state = FSG_STATE_TERMINATED;      // The thread is dead
        fsg_unbind(gadget);
-       close_all_backing_files(fsg);
        complete(&fsg->thread_notifier);
        return rc;
 }
        /* Wait for the thread to finish up */
        wait_for_completion(&fsg->thread_notifier);
 
-       close_all_backing_files(fsg);
        kref_put(&fsg->ref, fsg_release);
 }
 module_exit(fsg_cleanup);