powerpc: Remove check for CONFIG_SERIAL_TEXT_DEBUG
[pandora-kernel.git] / fs / libfs.c
index a184424..88e3e00 100644 (file)
@@ -3,6 +3,7 @@
  *     Library for filesystems writers.
  */
 
+#include <linux/blkdev.h>
 #include <linux/export.h>
 #include <linux/pagemap.h>
 #include <linux/slab.h>
@@ -923,16 +924,19 @@ struct dentry *generic_fh_to_parent(struct super_block *sb, struct fid *fid,
 EXPORT_SYMBOL_GPL(generic_fh_to_parent);
 
 /**
- * generic_file_fsync - generic fsync implementation for simple filesystems
+ * __generic_file_fsync - generic fsync implementation for simple filesystems
+ *
  * @file:      file to synchronize
+ * @start:     start offset in bytes
+ * @end:       end offset in bytes (inclusive)
  * @datasync:  only synchronize essential metadata if true
  *
  * This is a generic implementation of the fsync method for simple
  * filesystems which track all non-inode metadata in the buffers list
  * hanging off the address_space structure.
  */
-int generic_file_fsync(struct file *file, loff_t start, loff_t end,
-                      int datasync)
+int __generic_file_fsync(struct file *file, loff_t start, loff_t end,
+                                int datasync)
 {
        struct inode *inode = file->f_mapping->host;
        int err;
@@ -952,10 +956,34 @@ int generic_file_fsync(struct file *file, loff_t start, loff_t end,
        err = sync_inode_metadata(inode, 1);
        if (ret == 0)
                ret = err;
+
 out:
        mutex_unlock(&inode->i_mutex);
        return ret;
 }
+EXPORT_SYMBOL(__generic_file_fsync);
+
+/**
+ * generic_file_fsync - generic fsync implementation for simple filesystems
+ *                     with flush
+ * @file:      file to synchronize
+ * @start:     start offset in bytes
+ * @end:       end offset in bytes (inclusive)
+ * @datasync:  only synchronize essential metadata if true
+ *
+ */
+
+int generic_file_fsync(struct file *file, loff_t start, loff_t end,
+                      int datasync)
+{
+       struct inode *inode = file->f_mapping->host;
+       int err;
+
+       err = __generic_file_fsync(file, start, end, datasync);
+       if (err)
+               return err;
+       return blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL);
+}
 EXPORT_SYMBOL(generic_file_fsync);
 
 /**