}
#endif
-#if defined(HAVE_FILE_FSYNC_4ARGS) || defined(HAVE_FILE_FSYNC_2ARGS)
-#define ll_vfs_fsync_range(fp, start, end, datasync) \
- vfs_fsync_range(fp, start, end, datasync)
-#else
-#define ll_vfs_fsync_range(fp, start, end, datasync) \
- vfs_fsync_range(fp, file_dentry(fp), start, end, datasync)
-#endif
-
#ifndef IFSHIFT
#define IFSHIFT 12
#endif
cfs_tage_free(tage);
}
- rc = ll_vfs_fsync_range(filp, 0, LLONG_MAX, 1);
+ rc = vfs_fsync_range(filp, 0, LLONG_MAX, 1);
if (rc)
printk(KERN_ERR "sync returns %d\n", rc);
close:
]) # LC_SBOPS_EVICT_INODE
#
-# LC_FILE_FSYNC
-#
-# 2.6.35 file_operations.fsync taken 2 arguments.
-# 3.0.0 file_operations.fsync takes 4 arguments.
-#
-AC_DEFUN([LC_FILE_FSYNC], [
-LB_CHECK_COMPILE([if 'file_operations.fsync' takes 4 arguments],
-file_ops_fsync_4args, [
- #include <linux/fs.h>
-],[
- ((struct file_operations *)0)->fsync(NULL, 0, 0, 0);
-],[
- AC_DEFINE(HAVE_FILE_FSYNC_4ARGS, 1,
- [file_operations.fsync takes 4 arguments])
-],[
- LB_CHECK_COMPILE([if 'file_operations.fsync' takes 2 arguments],
- file_ops_fsync_2args, [
- #include <linux/fs.h>
- ],[
- ((struct file_operations *)0)->fsync(NULL, 0);
- ],[
- AC_DEFINE(HAVE_FILE_FSYNC_2ARGS, 1,
- [file_operations.fsync takes 2 arguments])
- ])
-])
-]) # LC_FILE_FSYNC
-
-#
# LC_KERNEL_LOCKED
#
# 2.6.37 remove kernel_locked
LC_HAVE_ADD_WAIT_QUEUE_EXCLUSIVE
# 2.6.35, 3.0.0
- LC_FILE_FSYNC
LC_EXPORT_SIMPLE_SETATTR
LC_EXPORT_TRUNCATE_COMPLETE_PAGE
* file_dentry() as is done otherwise.
*/
-#ifdef HAVE_FILE_FSYNC_4ARGS
int ll_fsync(struct file *file, loff_t start, loff_t end, int datasync)
{
struct dentry *dentry = file_dentry(file);
-#elif defined(HAVE_FILE_FSYNC_2ARGS)
-int ll_fsync(struct file *file, int datasync)
-{
- struct dentry *dentry = file_dentry(file);
- loff_t start = 0;
- loff_t end = LLONG_MAX;
-#else
-int ll_fsync(struct file *file, struct dentry *dentry, int datasync)
-{
- loff_t start = 0;
- loff_t end = LLONG_MAX;
-#endif
struct inode *inode = dentry->d_inode;
struct ll_inode_info *lli = ll_i2info(inode);
struct ptlrpc_request *req;
ENTRY;
- CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n",
- PFID(ll_inode2fid(inode)), inode);
+ CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), start %lld, end %lld,"
+ "datasync %d\n",
+ PFID(ll_inode2fid(inode)), inode, start, end, datasync);
+
ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_FSYNC, 1);
-#ifdef HAVE_FILE_FSYNC_4ARGS
- rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
- inode_lock(inode);
-#else
/* fsync's caller has already called _fdata{sync,write}, we want
* that IO to finish before calling the osc and mdc sync methods */
- rc = filemap_fdatawait(inode->i_mapping);
-#endif
+ rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
+ inode_lock(inode);
/* catch async errors that were recorded back when async writeback
* failed for pages in this mapping. */
fd->fd_write_failed = false;
}
-#ifdef HAVE_FILE_FSYNC_4ARGS
inode_unlock(inode);
-#endif
RETURN(rc);
}
int ll_dir_getstripe(struct inode *inode, void **lmmp,
int *lmm_size, struct ptlrpc_request **request,
u64 valid);
-#ifdef HAVE_FILE_FSYNC_4ARGS
int ll_fsync(struct file *file, loff_t start, loff_t end, int data);
-#elif defined(HAVE_FILE_FSYNC_2ARGS)
-int ll_fsync(struct file *file, int data);
-#else
-int ll_fsync(struct file *file, struct dentry *dentry, int data);
-#endif
int ll_merge_attr(const struct lu_env *env, struct inode *inode);
int ll_fid2path(struct inode *inode, void __user *arg);
int ll_data_version(struct inode *inode, __u64 *data_version, int flags);
if (!*cached)
RETURN(0);
-#ifdef HAVE_FILE_FSYNC_4ARGS
rc = file_inode(pcc_file)->i_fop->fsync(pcc_file,
start, end, datasync);
-#elif defined(HAVE_FILE_FSYNC_2ARGS)
- rc = file_inode(pcc_file)->i_fop->fsync(pcc_file, datasync);
-#else
- rc = file_inode(pcc_file)->i_fop->fsync(pcc_file,
- file_dentry(dentry), datasync);
-#endif
pcc_io_fini(inode);
RETURN(rc);
kunmap(pga[i]->pg);
}
- rc = ll_vfs_fsync_range(filp, 0, LLONG_MAX, 1);
+ rc = vfs_fsync_range(filp, 0, LLONG_MAX, 1);
if (rc)
CERROR("%s: sync returns %d\n", dbgcksum_file_name, rc);
filp_close(filp, NULL);
file->f_op = inode->i_fop;
set_file_inode(file, inode);
- rc = ll_vfs_fsync_range(file, start, end, 0);
+ rc = vfs_fsync_range(file, start, end, 0);
RETURN(rc);
}
kunmap(local_nb[i].lnb_page);
}
- rc = ll_vfs_fsync_range(filp, 0, LLONG_MAX, 1);
+ rc = vfs_fsync_range(filp, 0, LLONG_MAX, 1);
if (rc)
CERROR("%s: sync returns %d\n", dbgcksum_file_name, rc);
filp_close(filp, NULL);