]> nv-tegra.nvidia Code Review - linux-2.6.git/blobdiff - drivers/char/ps3flash.c
Merge tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[linux-2.6.git] / drivers / char / ps3flash.c
index 606048b72bcf2e0adbebf8590a92e4f1b55fd5b5..6abdde4da2b7834991a8e4e0b3feb52e0e054993 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/miscdevice.h>
 #include <linux/slab.h>
 #include <linux/uaccess.h>
+#include <linux/module.h>
 
 #include <asm/lv1call.h>
 #include <asm/ps3stor.h>
@@ -101,12 +102,16 @@ static loff_t ps3flash_llseek(struct file *file, loff_t offset, int origin)
 
        mutex_lock(&file->f_mapping->host->i_mutex);
        switch (origin) {
+       case 0:
+               break;
        case 1:
                offset += file->f_pos;
                break;
        case 2:
                offset += dev->regions[dev->region_idx].size*dev->blk_size;
                break;
+       default:
+               offset = -1;
        }
        if (offset < 0) {
                res = -EINVAL;
@@ -305,10 +310,14 @@ static int ps3flash_flush(struct file *file, fl_owner_t id)
        return ps3flash_writeback(ps3flash_dev);
 }
 
-static int ps3flash_fsync(struct file *file, struct dentry *dentry,
-                         int datasync)
+static int ps3flash_fsync(struct file *file, loff_t start, loff_t end, int datasync)
 {
-       return ps3flash_writeback(ps3flash_dev);
+       struct inode *inode = file->f_path.dentry->d_inode;
+       int err;
+       mutex_lock(&inode->i_mutex);
+       err = ps3flash_writeback(ps3flash_dev);
+       mutex_unlock(&inode->i_mutex);
+       return err;
 }
 
 static irqreturn_t ps3flash_interrupt(int irq, void *data)