aboutsummaryrefslogtreecommitdiffstats
path: root/module/zfs/zpl_super.c
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2011-03-15 12:03:42 -0700
committerBrian Behlendorf <[email protected]>2011-03-15 13:33:29 -0700
commit03f9ba9d990efb911026ebee0902671915db01a3 (patch)
tree00fd8410150d211ebf99fe5ccec8d7effc3a1d92 /module/zfs/zpl_super.c
parent3aff775555a40fe3e5193f1309ba6e80312be5ff (diff)
Register .sync_fs handler
Register the missing .sync_fs handler. This is a noop in most cases because the usual requirement is that sync just be initiated. As part of the DMU's normal transaction processing txgs will be frequently synced. However, when the 'wait' flag is set the requirement is that .sync_fs must not return until the data is safe on disk. With the addition of the .sync_fs handler this is now properly implemented.
Diffstat (limited to 'module/zfs/zpl_super.c')
-rw-r--r--module/zfs/zpl_super.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/module/zfs/zpl_super.c b/module/zfs/zpl_super.c
index 0417ce2ff..73e5268f5 100644
--- a/module/zfs/zpl_super.c
+++ b/module/zfs/zpl_super.c
@@ -105,6 +105,20 @@ zpl_put_super(struct super_block *sb)
}
static int
+zpl_sync_fs(struct super_block *sb, int wait)
+{
+ cred_t *cr;
+ int error;
+
+ cr = (cred_t *)get_current_cred();
+ error = -zfs_sync(sb, wait, cr);
+ put_cred(cr);
+ ASSERT3S(error, <=, 0);
+
+ return (error);
+}
+
+static int
zpl_statfs(struct dentry *dentry, struct kstatfs *statp)
{
int error;
@@ -179,7 +193,7 @@ const struct super_operations zpl_super_operations = {
#endif /* HAVE_EVICT_INODE */
.put_super = zpl_put_super,
.write_super = NULL,
- .sync_fs = NULL,
+ .sync_fs = zpl_sync_fs,
.freeze_fs = NULL,
.unfreeze_fs = NULL,
.statfs = zpl_statfs,