-- file_operations.ioctl() has been removed.
-- file_operations.fsync() changes need 2 arguments.
Change-Id: I7776593497dd988fbf860221e2dcea61c6c4870f
Signed-off-by: Yang Sheng <ys@whamcloud.com>
Reviewed-on: http://review.whamcloud.com/1862
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Niu Yawei <niu@whamcloud.com>
* XXX Do we need to parse flags and mode in cfs_filp_open?
*/
cfs_file_t *cfs_filp_open (const char *name, int flags, int mode, int *err);
+#ifndef HAVE_FILE_FSYNC_2ARGS
+# define cfs_do_fsync(fp, flag) ((fp)->f_op->fsync(fp, (fp)->f_dentry, flag))
+#else
+# define cfs_do_fsync(fp, flag) ((fp)->f_op->fsync(fp, flag))
+#endif
#define cfs_filp_close(f) filp_close(f, NULL)
#define cfs_filp_read(fp, buf, size, pos) (fp)->f_op->read((fp), (buf), (size), pos)
#define cfs_filp_write(fp, buf, size, pos) (fp)->f_op->write((fp), (buf), (size), pos)
-#define cfs_filp_fsync(fp) (fp)->f_op->fsync((fp), (fp)->f_dentry, 1)
+#define cfs_filp_fsync(fp) cfs_do_fsync(fp, 1)
#define cfs_get_file(f) get_file(f)
#define cfs_get_fd(x) fget(x)
return rc;
}
-static int
-libcfs_ioctl(struct inode *inode, struct file *file,
- unsigned int cmd, unsigned long arg)
+
+#ifdef HAVE_UNLOCKED_IOCTL
+static long libcfs_ioctl(struct file *file,
+ unsigned int cmd, unsigned long arg)
+#else
+static int libcfs_ioctl(struct inode *inode, struct file *file,
+ unsigned int cmd, unsigned long arg)
+#endif
{
struct cfs_psdev_file pfile;
int rc = 0;
}
static struct file_operations libcfs_fops = {
- ioctl: libcfs_ioctl,
- open: libcfs_psdev_open,
- release: libcfs_psdev_release
+#ifdef HAVE_UNLOCKED_IOCTL
+ unlocked_ioctl: libcfs_ioctl,
+#else
+ ioctl: libcfs_ioctl,
+#endif
+ open : libcfs_psdev_open,
+ release : libcfs_psdev_release
};
cfs_psdev_t libcfs_dev = {
#ifdef HAVE_UNLOCKED_IOCTL
if (sock_filp->f_op->unlocked_ioctl)
rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg);
- else
+#else
+ lock_kernel();
+ rc = sock_filp->f_op->ioctl(sock_filp->f_dentry->d_inode,
+ sock_filp, cmd, arg);
+ unlock_kernel();
#endif
- {
- lock_kernel();
- rc =sock_filp->f_op->ioctl(sock_filp->f_dentry->d_inode,
- sock_filp, cmd, arg);
- unlock_kernel();
- }
set_fs(oldmm);
fput(sock_filp);
])
#
+# 2.6.35 file_operations.fsync taken 2 arguments.
+#
+AC_DEFUN([LC_FILE_FSYNC],
+[AC_MSG_CHECKING([if file_operations.fsync taken 2 arguments])
+LB_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+],[
+ ((struct file_operations *)0)->fsync(NULL, 0);
+],[
+ AC_DEFINE(HAVE_FILE_FSYNC_2ARGS, 1,
+ [file_operations.fsync taken 2 arguments])
+ AC_MSG_RESULT([yes])
+],[
+ AC_MSG_RESULT([no])
+])
+])
+
+#
# 2.6.38 export blkdev_get_by_dev
#
AC_DEFUN([LC_BLKDEV_GET_BY_DEV],
LC_BLK_QUEUE_MAX_SEGMENTS
LC_SET_CPUS_ALLOWED
+ # 2.6.35
+ LC_FILE_FSYNC
+
# 2.6.36
LC_SBOPS_EVICT_INODE
RETURN(rc);
}
-static int ll_dir_ioctl(struct inode *inode, struct file *file,
+#ifdef HAVE_UNLOCKED_IOCTL
+static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+#else
+static int ll_dir_ioctl(struct inode *unuse, struct file *file,
unsigned int cmd, unsigned long arg)
+#endif
{
+ struct inode *inode = file->f_dentry->d_inode;
struct ll_sb_info *sbi = ll_i2sbi(inode);
struct obd_ioctl_data *data;
int rc = 0;
.release = ll_dir_release,
.read = generic_read_dir,
.readdir = ll_readdir,
- .ioctl = ll_dir_ioctl,
- .fsync = ll_fsync
+#ifdef HAVE_UNLOCKED_IOCTL
+ .unlocked_ioctl = ll_dir_ioctl,
+#else
+ .ioctl = ll_dir_ioctl,
+#endif
+ .fsync = ll_fsync,
};
return rc ? -EIO : 0;
}
+#ifndef HAVE_FILE_FSYNC_2ARGS
int ll_fsync(struct file *file, struct dentry *dentry, int data)
+#else
+int ll_fsync(struct file *file, int data)
+#endif
{
- struct inode *inode = dentry->d_inode;
+ struct inode *inode = file->f_dentry->d_inode;
struct ll_inode_info *lli = ll_i2info(inode);
struct lov_stripe_md *lsm = lli->lli_smd;
struct ptlrpc_request *req;
int set_default);
int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmm,
int *lmm_size, struct ptlrpc_request **request);
+#ifndef HAVE_FILE_FSYNC_2ARGS
int ll_fsync(struct file *file, struct dentry *dentry, int data);
+#else
+int ll_fsync(struct file *file, int data);
+#endif
int ll_do_fiemap(struct inode *inode, struct ll_user_fiemap *fiemap,
int num_bytes);
int ll_merge_lvb(struct inode *inode);
if (!file || !file->f_op || !file->f_op->fsync)
RETURN(-ENOSYS);
- RETURN(file->f_op->fsync(file, file->f_dentry, 0));
+ RETURN(cfs_do_fsync(file, 0));
}
EXPORT_SYMBOL(lustre_fsync);