diff options
Diffstat (limited to 'drivers/usb/gadget/printer.c')
-rw-r--r-- | drivers/usb/gadget/printer.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c index d5df8dd9d58e..a341dde6f9c3 100644 --- a/drivers/usb/gadget/printer.c +++ b/drivers/usb/gadget/printer.c | |||
@@ -794,12 +794,14 @@ printer_write(struct file *fd, const char __user *buf, size_t len, loff_t *ptr) | |||
794 | } | 794 | } |
795 | 795 | ||
796 | static int | 796 | static int |
797 | printer_fsync(struct file *fd, int datasync) | 797 | printer_fsync(struct file *fd, loff_t start, loff_t end, int datasync) |
798 | { | 798 | { |
799 | struct printer_dev *dev = fd->private_data; | 799 | struct printer_dev *dev = fd->private_data; |
800 | struct inode *inode = fd->f_path.dentry->d_inode; | ||
800 | unsigned long flags; | 801 | unsigned long flags; |
801 | int tx_list_empty; | 802 | int tx_list_empty; |
802 | 803 | ||
804 | mutex_lock(&inode->i_mutex); | ||
803 | spin_lock_irqsave(&dev->lock, flags); | 805 | spin_lock_irqsave(&dev->lock, flags); |
804 | tx_list_empty = (likely(list_empty(&dev->tx_reqs))); | 806 | tx_list_empty = (likely(list_empty(&dev->tx_reqs))); |
805 | spin_unlock_irqrestore(&dev->lock, flags); | 807 | spin_unlock_irqrestore(&dev->lock, flags); |
@@ -809,6 +811,7 @@ printer_fsync(struct file *fd, int datasync) | |||
809 | wait_event_interruptible(dev->tx_flush_wait, | 811 | wait_event_interruptible(dev->tx_flush_wait, |
810 | (likely(list_empty(&dev->tx_reqs_active)))); | 812 | (likely(list_empty(&dev->tx_reqs_active)))); |
811 | } | 813 | } |
814 | mutex_unlock(&inode->i_mutex); | ||
812 | 815 | ||
813 | return 0; | 816 | return 0; |
814 | } | 817 | } |