introduce an option to disable the metadata sync
in case the filesystem handles this correctly the sync can be
skipped, but synchronization of the data that was written can still
be configured (in opposition to the disable flag disabling all
sync operations)
Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Fri Feb 18 17:31:59 CET 2011 on sn-devel-104
* ensure meta data operations are performed synchronously
*
* Copyright (C) Andrew Tridgell 2007
* ensure meta data operations are performed synchronously
*
* Copyright (C) Andrew Tridgell 2007
+ * Copyright (C) Christian Ambach, 2010-2011
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
syncops:onclose = no
that can be set either globally or per share.
syncops:onclose = no
that can be set either globally or per share.
- you can also disable the module completely for a service with
+ On certain filesystems that only require the last data written to be
+ fsync()'ed, you can disable the metadata synchronization of this module with
+ syncops:onmeta = no
+ This option can be set either globally or per share.
+
+ you can also disable the module completely for a share with
syncops:disable = true
*/
struct syncops_config_data {
bool onclose;
syncops:disable = true
*/
struct syncops_config_data {
bool onclose;
return -1);
ret = SMB_VFS_NEXT_RENAME(handle, smb_fname_src, smb_fname_dst);
return -1);
ret = SMB_VFS_NEXT_RENAME(handle, smb_fname_src, smb_fname_dst);
- if (ret == 0 && !config->disable) {
+ if (ret == 0 && config->onmeta && !config->disable) {
syncops_two_names(smb_fname_src->base_name,
smb_fname_dst->base_name);
}
syncops_two_names(smb_fname_src->base_name,
smb_fname_dst->base_name);
}
return -1); \
ret = SMB_VFS_NEXT_ ## op args; \
if (ret == 0 \
return -1); \
ret = SMB_VFS_NEXT_ ## op args; \
if (ret == 0 \
+ && config->onmeta && !config->disable \
&& fname) syncops_name(fname); \
return ret; \
} while (0)
&& fname) syncops_name(fname); \
return ret; \
} while (0)
return -1); \
ret = SMB_VFS_NEXT_ ## op args; \
if (ret == 0 \
return -1); \
ret = SMB_VFS_NEXT_ ## op args; \
if (ret == 0 \
+ && config->onmeta && !config->disable \
&& fname) syncops_smb_fname(fname); \
return ret; \
} while (0)
&& fname) syncops_smb_fname(fname); \
return ret; \
} while (0)
config->onclose = lp_parm_bool(SNUM(handle->conn), "syncops",
"onclose", true);
config->onclose = lp_parm_bool(SNUM(handle->conn), "syncops",
"onclose", true);
+ config->onmeta = lp_parm_bool(SNUM(handle->conn), "syncops",
+ "onmeta", true);
+
config->disable = lp_parm_bool(SNUM(handle->conn), "syncops",
"disable", false);
config->disable = lp_parm_bool(SNUM(handle->conn), "syncops",
"disable", false);