58 lines
1.6 KiB
Diff
58 lines
1.6 KiB
Diff
|
|
From 657bbcfb7114b0246c6ce72cde75fcacb9a0d61b Mon Sep 17 00:00:00 2001
|
||
|
|
From: Andrew Price <anprice@redhat.com>
|
||
|
|
Date: Thu, 18 Mar 2021 17:50:16 +0000
|
||
|
|
Subject: [PATCH] gfs2_jadd: Don't fsync after each block written
|
||
|
|
|
||
|
|
gfs2_jadd has always called fsync() after writing each block of the
|
||
|
|
journal. There doesn't seem to be any need for that so take the fsync()
|
||
|
|
call out of the loop.
|
||
|
|
|
||
|
|
Add an additional fsync() after preallocation to make sure we're in good
|
||
|
|
shape before writing the log headers.
|
||
|
|
|
||
|
|
In my tests this reduces the time to add one journal from 5 minutes to
|
||
|
|
9 seconds.
|
||
|
|
|
||
|
|
Signed-off-by: Andrew Price <anprice@redhat.com>
|
||
|
|
---
|
||
|
|
gfs2/mkfs/main_jadd.c | 15 ++++++++++-----
|
||
|
|
1 file changed, 10 insertions(+), 5 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/gfs2/mkfs/main_jadd.c b/gfs2/mkfs/main_jadd.c
|
||
|
|
index 0a18bfb2..2bd0f7b0 100644
|
||
|
|
--- a/gfs2/mkfs/main_jadd.c
|
||
|
|
+++ b/gfs2/mkfs/main_jadd.c
|
||
|
|
@@ -537,6 +537,11 @@ static int add_j(struct gfs2_sbd *sdp, struct jadd_opts *opts)
|
||
|
|
if (error != 0)
|
||
|
|
goto close_fd;
|
||
|
|
|
||
|
|
+ error = fsync(fd);
|
||
|
|
+ if (error != 0) {
|
||
|
|
+ perror("Failed to sync journal metadata");
|
||
|
|
+ goto close_fd;
|
||
|
|
+ }
|
||
|
|
if ((error = lseek(fd, 0, SEEK_SET)) < 0) {
|
||
|
|
perror("add_j lseek");
|
||
|
|
goto close_fd;
|
||
|
|
@@ -580,12 +585,12 @@ static int add_j(struct gfs2_sbd *sdp, struct jadd_opts *opts)
|
||
|
|
seq = 0;
|
||
|
|
off += sdp->bsize;
|
||
|
|
|
||
|
|
- if ((error = fsync(fd))) {
|
||
|
|
- perror("add_j fsync");
|
||
|
|
- goto close_fd;
|
||
|
|
- }
|
||
|
|
}
|
||
|
|
-
|
||
|
|
+ error = fsync(fd);
|
||
|
|
+ if (error != 0) {
|
||
|
|
+ perror("Failed to sync journal metadata");
|
||
|
|
+ goto close_fd;
|
||
|
|
+ }
|
||
|
|
sprintf(new_name, "journal%u", opts->journals);
|
||
|
|
error = rename2system(opts, opts->jindex, new_name);
|
||
|
|
if (error < 0 && errno != EEXIST){
|
||
|
|
--
|
||
|
|
2.39.0.windows.2
|
||
|
|
|