summaryrefslogtreecommitdiffstats
path: root/tests/basic/gfapi/bug1283983.sh
diff options
context:
space:
mode:
authorRavishankar N <ravishankar@redhat.com>2016-08-05 11:22:18 +0000
committerPranith Kumar Karampuri <pkarampu@redhat.com>2016-08-05 09:06:51 -0700
commitcf51bc699646359be92969024a52c225e7ee55a1 (patch)
treed23e5efee0c6d3b07c548c2150de725fca5efa15 /tests/basic/gfapi/bug1283983.sh
parentd297d2bdfc4d5ba99c37b22dd1ae0f8e8e92fe7b (diff)
posix: honour fsync flags in posix_do_zerofill
commit 6d994661db96cad43f26d0d1e2fba31dce9a76f5 introduced fallocate + FALLOC_FL_ZERO_RANGE to do posix_do_zerofill but did not do an fsync if O_SYNC or O_DSYNC fd flags were set. Prashant Pai pointed out performing fallocate(2) does not remove the necessity to do fsyncs if durability is desired: http://linux-fsdevel.vger.kernel.narkive.com/bDmrAUlh/fallocate-falloc-fl-punch-hole So fixed it to honour the fd flags. Change-Id: I27ae90b429185d0af29a5e632c4a8b242075a899 BUG: 1364449 Signed-off-by: Ravishankar N <ravishankar@redhat.com> Reviewed-on: http://review.gluster.org/15100 Reviewed-by: Prashanth Pai <ppai@redhat.com> Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Niels de Vos <ndevos@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Diffstat (limited to 'tests/basic/gfapi/bug1283983.sh')
0 files changed, 0 insertions, 0 deletions
for (i = 0; i < 3; i++) sys_close (pi[i][i ? 1 : 0]); sys_close (xpi[1]); if (ret == -1) { for (i = 0; i < 3; i++) { if (runner->chio[i]) { fclose (runner->chio[i]); runner->chio[i] = NULL; } } } else { ret = sys_read (xpi[0], (char *)&errno_priv, sizeof (errno_priv)); sys_close (xpi[0]); if (ret <= 0) return 0; GF_ASSERT (ret == sizeof (errno_priv)); } errno = errno_priv; return -1; } int runner_end_reuse (runner_t *runner) { int i = 0; int ret = 1; int chstat = 0; if (runner->chpid > 0) { if (waitpid (runner->chpid, &chstat, 0) == runner->chpid) { if (WIFEXITED(chstat)) { ret = WEXITSTATUS(chstat); } else { ret = chstat; } } } for (i = 0; i < 3; i++) { if (runner->chio[i]) { fclose (runner->chio[i]); runner->chio[i] = NULL; } } return -ret; } int runner_end (runner_t *runner) { int i = 0; int ret = -1; char **p = NULL; ret = runner_end_reuse (runner); if (runner->argv) { for (p = runner->argv; *p; p++) GF_FREE (*p); GF_FREE (runner->argv); } for (i = 0; i < 3; i++) sys_close (runner->chfd[i]); return ret; } static int runner_run_generic (runner_t *runner, int (*rfin)(runner_t *runner)) { int ret = 0; ret = runner_start (runner); if (ret) goto out; ret = rfin (runner); out: return ret; } int runner_run (runner_t *runner) { return runner_run_generic (runner, runner_end); } int runner_run_nowait (runner_t *runner) { int pid; pid = fork (); if (!pid) { setsid (); _exit (runner_start (runner)); } if (pid > 0) runner->chpid = pid; return runner_end (runner); } int runner_run_reuse (runner_t *runner) { return runner_run_generic (runner, runner_end_reuse); } int runcmd (const char *arg, ...) { runner_t runner; va_list argp; runinit (&runner); /* ISO C requires a named argument before '...' */ runner_add_arg (&runner, arg); va_start (argp, arg); runner_va_add_args (&runner, argp); va_end (argp); return runner_run (&runner); } #ifdef RUN_DO_TESTS static void TBANNER (const char *txt) { printf("######\n### testing %s\n", txt); } int main (int argc, char **argv) { runner_t runner; char buf[80]; char *wdbuf;; int ret; int fd;