drop unused dentry argument to ->fsync
[safe/jmp/linux-2.6] / fs / ext2 / file.c
index c051798..48bcfc3 100644 (file)
@@ -19,6 +19,8 @@
  */
 
 #include <linux/time.h>
+#include <linux/pagemap.h>
+#include <linux/quotaops.h>
 #include "ext2.h"
 #include "xattr.h"
 #include "acl.h"
@@ -38,6 +40,22 @@ static int ext2_release_file (struct inode * inode, struct file * filp)
        return 0;
 }
 
+int ext2_fsync(struct file *file, int datasync)
+{
+       int ret;
+       struct super_block *sb = file->f_mapping->host->i_sb;
+       struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping;
+
+       ret = simple_fsync(file, datasync);
+       if (ret == -EIO || test_and_clear_bit(AS_EIO, &mapping->flags)) {
+               /* We don't really know where the IO error happened... */
+               ext2_error(sb, __func__,
+                          "detected IO error when writing metadata buffers");
+               ret = -EIO;
+       }
+       return ret;
+}
+
 /*
  * We have mostly NULL's here: the current defaults are ok for
  * the ext2 filesystem.
@@ -48,14 +66,14 @@ const struct file_operations ext2_file_operations = {
        .write          = do_sync_write,
        .aio_read       = generic_file_aio_read,
        .aio_write      = generic_file_aio_write,
-       .ioctl          = ext2_ioctl,
+       .unlocked_ioctl = ext2_ioctl,
 #ifdef CONFIG_COMPAT
        .compat_ioctl   = ext2_compat_ioctl,
 #endif
        .mmap           = generic_file_mmap,
-       .open           = generic_file_open,
+       .open           = dquot_file_open,
        .release        = ext2_release_file,
-       .fsync          = ext2_sync_file,
+       .fsync          = ext2_fsync,
        .splice_read    = generic_file_splice_read,
        .splice_write   = generic_file_splice_write,
 };
@@ -65,14 +83,14 @@ const struct file_operations ext2_xip_file_operations = {
        .llseek         = generic_file_llseek,
        .read           = xip_file_read,
        .write          = xip_file_write,
-       .ioctl          = ext2_ioctl,
+       .unlocked_ioctl = ext2_ioctl,
 #ifdef CONFIG_COMPAT
        .compat_ioctl   = ext2_compat_ioctl,
 #endif
        .mmap           = xip_file_mmap,
-       .open           = generic_file_open,
+       .open           = dquot_file_open,
        .release        = ext2_release_file,
-       .fsync          = ext2_sync_file,
+       .fsync          = ext2_fsync,
 };
 #endif
 
@@ -85,5 +103,6 @@ const struct inode_operations ext2_file_inode_operations = {
        .removexattr    = generic_removexattr,
 #endif
        .setattr        = ext2_setattr,
-       .permission     = ext2_permission,
+       .check_acl      = ext2_check_acl,
+       .fiemap         = ext2_fiemap,
 };