]> git.proxmox.com Git - mirror_spl-debian.git/blobdiff - include/linux/file_compat.h
Imported Upstream version 0.6.4.1
[mirror_spl-debian.git] / include / linux / file_compat.h
index 27819d5e500fea30fb2c2ffe009767c34907dbac..a2db2590a23554e7fc56fa841e79c58793275e8e 100644 (file)
@@ -6,7 +6,7 @@
  *  UCRL-CODE-235197
  *
  *  This file is part of the SPL, Solaris Porting Layer.
- *  For details, see <http://github.com/behlendorf/spl/>.
+ *  For details, see <http://zfsonlinux.org/>.
  *
  *  The SPL is free software; you can redistribute it and/or modify it
  *  under the terms of the GNU General Public License as published by the
@@ -50,48 +50,34 @@ spl_filp_open(const char *name, int flags, int mode, int *err)
 #define spl_filp_poff(f)               (&(f)->f_pos)
 #define spl_filp_write(fp, b, s, p)    (fp)->f_op->write((fp), (b), (s), p)
 
-#ifdef HAVE_VFS_FSYNC
-# ifdef HAVE_2ARGS_VFS_FSYNC
-#  define spl_filp_fsync(fp, sync)     vfs_fsync(fp, sync)
-# else
-#  define spl_filp_fsync(fp, sync)     vfs_fsync(fp, (fp)->f_dentry, sync)
-# endif /* HAVE_2ARGS_VFS_FSYNC */
-#else
-# include <linux/buffer_head.h>
-# define spl_filp_fsync(fp, sync)      file_fsync(fp, (fp)->f_dentry, sync)
-#endif /* HAVE_VFS_FSYNC */
+static inline int
+spl_filp_fallocate(struct file *fp, int mode, loff_t offset, loff_t len)
+{
+       int error = -EOPNOTSUPP;
 
-#ifdef HAVE_INODE_I_MUTEX
-#define spl_inode_lock(ip)             (mutex_lock(&(ip)->i_mutex))
-#define spl_inode_lock_nested(ip, type)        (mutex_lock_nested((&(ip)->i_mutex),  \
-                                       (type)))
-#define spl_inode_unlock(ip)           (mutex_unlock(&(ip)->i_mutex))
+#ifdef HAVE_FILE_FALLOCATE
+       if (fp->f_op->fallocate)
+               error = fp->f_op->fallocate(fp, mode, offset, len);
 #else
-#define spl_inode_lock(ip)             (down(&(ip)->i_sem))
-#define spl_inode_unlock(ip)           (up(&(ip)->i_sem))
-#endif /* HAVE_INODE_I_MUTEX */
+#ifdef HAVE_INODE_FALLOCATE
+       if (fp->f_dentry && fp->f_dentry->d_inode &&
+           fp->f_dentry->d_inode->i_op->fallocate)
+               error = fp->f_dentry->d_inode->i_op->fallocate(
+                   fp->f_dentry->d_inode, mode, offset, len);
+#endif /* HAVE_INODE_FALLOCATE */
+#endif /*HAVE_FILE_FALLOCATE */
 
-#ifdef HAVE_KERN_PATH_PARENT_HEADER
-# ifndef HAVE_KERN_PATH_PARENT_SYMBOL
-typedef int (*kern_path_parent_t)(const char *, struct nameidata *);
-extern kern_path_parent_t kern_path_parent_fn;
-#  define spl_kern_path_parent(path, nd)       kern_path_parent_fn(path, nd)
-# else
-#  define spl_kern_path_parent(path, nd)       kern_path_parent(path, nd)
-# endif /* HAVE_KERN_PATH_PARENT_SYMBOL */
-#else
-# define spl_kern_path_parent(path, nd)        path_lookup(path, LOOKUP_PARENT, nd)
-#endif /* HAVE_KERN_PATH_PARENT_HEADER */
+       return (error);
+}
 
-#ifdef HAVE_KERN_PATH_LOCKED
-typedef struct dentry * (*kern_path_locked_t)(const char *, struct path *);
-extern kern_path_locked_t kern_path_locked_fn;
-# define spl_kern_path_locked(name, path)      kern_path_locked_fn(name, path)
-#endif /* HAVE_KERN_PATH_LOCKED */
+#ifdef HAVE_2ARGS_VFS_FSYNC
+#define        spl_filp_fsync(fp, sync)        vfs_fsync(fp, sync)
+#else
+#define        spl_filp_fsync(fp, sync)        vfs_fsync(fp, (fp)->f_dentry, sync)
+#endif /* HAVE_2ARGS_VFS_FSYNC */
 
-#ifndef HAVE_CLEAR_CLOSE_ON_EXEC
-#define __clear_close_on_exec(fd, fdt) FD_CLR(fd, fdt->close_on_exec)
-#endif
+#define        spl_inode_lock(ip)              mutex_lock(&(ip)->i_mutex)
+#define        spl_inode_unlock(ip)            mutex_unlock(&(ip)->i_mutex)
 
 #endif /* SPL_FILE_COMPAT_H */