Blame SOURCES/0077-fs-ntfs3-Add-sync-flag-to-ntfs_sb_write_run-and-al_u.patch

Kmods SIG 63c143
From 6354467245ff8dd04b54e39790f2ee4d21d5419e Mon Sep 17 00:00:00 2001
Kmods SIG 63c143
From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Kmods SIG 63c143
Date: Thu, 9 Sep 2021 13:15:20 +0300
Kmods SIG 63c143
Subject: [Backport 6354467245ff] src: Add sync flag to ntfs_sb_write_run
Kmods SIG 63c143
 and al_update
Kmods SIG 63c143
Kmods SIG 63c143
This allows to wait only when it's requested.
Kmods SIG 63c143
It speeds up creation of hardlinks.
Kmods SIG 63c143
Kmods SIG 63c143
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Kmods SIG 63c143
---
Kmods SIG 63c143
 src/attrib.c   | 2 +-
Kmods SIG 63c143
 src/attrlist.c | 6 +++---
Kmods SIG 63c143
 src/frecord.c  | 2 +-
Kmods SIG 63c143
 src/fslog.c    | 8 ++++----
Kmods SIG 63c143
 src/fsntfs.c   | 8 ++++----
Kmods SIG 63c143
 src/inode.c    | 2 +-
Kmods SIG 63c143
 src/ntfs_fs.h  | 4 ++--
Kmods SIG 63c143
 src/xattr.c    | 2 +-
Kmods SIG 63c143
 8 files changed, 17 insertions(+), 17 deletions(-)
Kmods SIG 63c143
Kmods SIG 63c143
diff --git a/src/attrib.c b/src/attrib.c
Kmods SIG 63c143
index c15cc17e3cd92864f30fd0d3fbb8f20b98437cde..8a00fa978f5f9c3d496bd333bf1ace72d9194f37 100644
Kmods SIG 63c143
--- a/src/attrib.c
Kmods SIG 63c143
+++ b/src/attrib.c
Kmods SIG 63c143
@@ -287,7 +287,7 @@ int attr_make_nonresident(struct ntfs_inode *ni, struct ATTRIB *attr,
Kmods SIG 63c143
 		if (!rsize) {
Kmods SIG 63c143
 			/* Empty resident -> Non empty nonresident. */
Kmods SIG 63c143
 		} else if (!is_data) {
Kmods SIG 63c143
-			err = ntfs_sb_write_run(sbi, run, 0, data, rsize);
Kmods SIG 63c143
+			err = ntfs_sb_write_run(sbi, run, 0, data, rsize, 0);
Kmods SIG 63c143
 			if (err)
Kmods SIG 63c143
 				goto out2;
Kmods SIG 63c143
 		} else if (!page) {
Kmods SIG 63c143
diff --git a/src/attrlist.c b/src/attrlist.c
Kmods SIG 63c143
index b9da527b96aa2ab00bf43d439d8527b587946a9d..bad6d8a849a24b3a4a9fc2c4c372496d6ac1b54a 100644
Kmods SIG 63c143
--- a/src/attrlist.c
Kmods SIG 63c143
+++ b/src/attrlist.c
Kmods SIG 63c143
@@ -333,7 +333,7 @@ int al_add_le(struct ntfs_inode *ni, enum ATTR_TYPE type, const __le16 *name,
Kmods SIG 63c143
 
Kmods SIG 63c143
 	if (attr && attr->non_res) {
Kmods SIG 63c143
 		err = ntfs_sb_write_run(ni->mi.sbi, &al->run, 0, al->le,
Kmods SIG 63c143
-					al->size);
Kmods SIG 63c143
+					al->size, 0);
Kmods SIG 63c143
 		if (err)
Kmods SIG 63c143
 			return err;
Kmods SIG 63c143
 		al->dirty = false;
Kmods SIG 63c143
@@ -420,7 +420,7 @@ bool al_delete_le(struct ntfs_inode *ni, enum ATTR_TYPE type, CLST vcn,
Kmods SIG 63c143
 	return true;
Kmods SIG 63c143
 }
Kmods SIG 63c143
 
Kmods SIG 63c143
-int al_update(struct ntfs_inode *ni)
Kmods SIG 63c143
+int al_update(struct ntfs_inode *ni, int sync)
Kmods SIG 63c143
 {
Kmods SIG 63c143
 	int err;
Kmods SIG 63c143
 	struct ATTRIB *attr;
Kmods SIG 63c143
@@ -442,7 +442,7 @@ int al_update(struct ntfs_inode *ni)
Kmods SIG 63c143
 		memcpy(resident_data(attr), al->le, al->size);
Kmods SIG 63c143
 	} else {
Kmods SIG 63c143
 		err = ntfs_sb_write_run(ni->mi.sbi, &al->run, 0, al->le,
Kmods SIG 63c143
-					al->size);
Kmods SIG 63c143
+					al->size, sync);
Kmods SIG 63c143
 		if (err)
Kmods SIG 63c143
 			goto out;
Kmods SIG 63c143
 
Kmods SIG 63c143
diff --git a/src/frecord.c b/src/frecord.c
Kmods SIG 63c143
index 0d00b2301a2f1fa380335ab91abd0afa53538053..9a53f809576d0b795ebb6ed2834792a60be463b0 100644
Kmods SIG 63c143
--- a/src/frecord.c
Kmods SIG 63c143
+++ b/src/frecord.c
Kmods SIG 63c143
@@ -3208,7 +3208,7 @@ int ni_write_inode(struct inode *inode, int sync, const char *hint)
Kmods SIG 63c143
 					goto out;
Kmods SIG 63c143
 			}
Kmods SIG 63c143
 
Kmods SIG 63c143
-			err = al_update(ni);
Kmods SIG 63c143
+			err = al_update(ni, sync);
Kmods SIG 63c143
 			if (err)
Kmods SIG 63c143
 				goto out;
Kmods SIG 63c143
 		}
Kmods SIG 63c143
diff --git a/src/fslog.c b/src/fslog.c
Kmods SIG 63c143
index 6e7f9b72792b354a6e588b506c7352b286ed58bd..06492f088d6020592bd4fdb8b1a6ecd22b823324 100644
Kmods SIG 63c143
--- a/src/fslog.c
Kmods SIG 63c143
+++ b/src/fslog.c
Kmods SIG 63c143
@@ -2215,7 +2215,7 @@ static int last_log_lsn(struct ntfs_log *log)
Kmods SIG 63c143
 
Kmods SIG 63c143
 			err = ntfs_sb_write_run(log->ni->mi.sbi,
Kmods SIG 63c143
 						&log->ni->file.run, off, page,
Kmods SIG 63c143
-						log->page_size);
Kmods SIG 63c143
+						log->page_size, 0);
Kmods SIG 63c143
 
Kmods SIG 63c143
 			if (err)
Kmods SIG 63c143
 				goto out;
Kmods SIG 63c143
@@ -3706,7 +3706,7 @@ static int do_action(struct ntfs_log *log, struct OPEN_ATTR_ENRTY *oe,
Kmods SIG 63c143
 
Kmods SIG 63c143
 	if (a_dirty) {
Kmods SIG 63c143
 		attr = oa->attr;
Kmods SIG 63c143
-		err = ntfs_sb_write_run(sbi, oa->run1, vbo, buffer_le, bytes);
Kmods SIG 63c143
+		err = ntfs_sb_write_run(sbi, oa->run1, vbo, buffer_le, bytes, 0);
Kmods SIG 63c143
 		if (err)
Kmods SIG 63c143
 			goto out;
Kmods SIG 63c143
 	}
Kmods SIG 63c143
@@ -5148,10 +5148,10 @@ int log_replay(struct ntfs_inode *ni, bool *initialized)
Kmods SIG 63c143
 
Kmods SIG 63c143
 	ntfs_fix_pre_write(&rh->rhdr, log->page_size);
Kmods SIG 63c143
 
Kmods SIG 63c143
-	err = ntfs_sb_write_run(sbi, &ni->file.run, 0, rh, log->page_size);
Kmods SIG 63c143
+	err = ntfs_sb_write_run(sbi, &ni->file.run, 0, rh, log->page_size, 0);
Kmods SIG 63c143
 	if (!err)
Kmods SIG 63c143
 		err = ntfs_sb_write_run(sbi, &log->ni->file.run, log->page_size,
Kmods SIG 63c143
-					rh, log->page_size);
Kmods SIG 63c143
+					rh, log->page_size, 0);
Kmods SIG 63c143
 
Kmods SIG 63c143
 	kfree(rh);
Kmods SIG 63c143
 	if (err)
Kmods SIG 63c143
diff --git a/src/fsntfs.c b/src/fsntfs.c
Kmods SIG 63c143
index 77d2e56d5b4f34a693765d3230cf032122a04239..4de9acb1696898057fe3a096984ab3c6c1119810 100644
Kmods SIG 63c143
--- a/src/fsntfs.c
Kmods SIG 63c143
+++ b/src/fsntfs.c
Kmods SIG 63c143
@@ -1077,7 +1077,7 @@ int ntfs_sb_write(struct super_block *sb, u64 lbo, size_t bytes,
Kmods SIG 63c143
 }
Kmods SIG 63c143
 
Kmods SIG 63c143
 int ntfs_sb_write_run(struct ntfs_sb_info *sbi, const struct runs_tree *run,
Kmods SIG 63c143
-		      u64 vbo, const void *buf, size_t bytes)
Kmods SIG 63c143
+		      u64 vbo, const void *buf, size_t bytes, int sync)
Kmods SIG 63c143
 {
Kmods SIG 63c143
 	struct super_block *sb = sbi->sb;
Kmods SIG 63c143
 	u8 cluster_bits = sbi->cluster_bits;
Kmods SIG 63c143
@@ -1097,7 +1097,7 @@ int ntfs_sb_write_run(struct ntfs_sb_info *sbi, const struct runs_tree *run,
Kmods SIG 63c143
 
Kmods SIG 63c143
 	for (;;) {
Kmods SIG 63c143
 		u32 op = min_t(u64, len, bytes);
Kmods SIG 63c143
-		int err = ntfs_sb_write(sb, lbo, op, buf, 0);
Kmods SIG 63c143
+		int err = ntfs_sb_write(sb, lbo, op, buf, sync);
Kmods SIG 63c143
 
Kmods SIG 63c143
 		if (err)
Kmods SIG 63c143
 			return err;
Kmods SIG 63c143
@@ -2172,7 +2172,7 @@ int ntfs_insert_security(struct ntfs_sb_info *sbi,
Kmods SIG 63c143
 
Kmods SIG 63c143
 	/* Write main SDS bucket. */
Kmods SIG 63c143
 	err = ntfs_sb_write_run(sbi, &ni->file.run, sbi->security.next_off,
Kmods SIG 63c143
-				d_security, aligned_sec_size);
Kmods SIG 63c143
+				d_security, aligned_sec_size, 0);
Kmods SIG 63c143
 
Kmods SIG 63c143
 	if (err)
Kmods SIG 63c143
 		goto out;
Kmods SIG 63c143
@@ -2190,7 +2190,7 @@ int ntfs_insert_security(struct ntfs_sb_info *sbi,
Kmods SIG 63c143
 
Kmods SIG 63c143
 	/* Write copy SDS bucket. */
Kmods SIG 63c143
 	err = ntfs_sb_write_run(sbi, &ni->file.run, mirr_off, d_security,
Kmods SIG 63c143
-				aligned_sec_size);
Kmods SIG 63c143
+				aligned_sec_size, 0);
Kmods SIG 63c143
 	if (err)
Kmods SIG 63c143
 		goto out;
Kmods SIG 63c143
 
Kmods SIG 63c143
diff --git a/src/inode.c b/src/inode.c
Kmods SIG 63c143
index 33f278a0947ca23e103683b9daece8f539da355b..d583b71bec502f2042764e27f565e20be1858394 100644
Kmods SIG 63c143
--- a/src/inode.c
Kmods SIG 63c143
+++ b/src/inode.c
Kmods SIG 63c143
@@ -1584,7 +1584,7 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns,
Kmods SIG 63c143
 
Kmods SIG 63c143
 	/* Write non resident data. */
Kmods SIG 63c143
 	if (nsize) {
Kmods SIG 63c143
-		err = ntfs_sb_write_run(sbi, &ni->file.run, 0, rp, nsize);
Kmods SIG 63c143
+		err = ntfs_sb_write_run(sbi, &ni->file.run, 0, rp, nsize, 0);
Kmods SIG 63c143
 		if (err)
Kmods SIG 63c143
 			goto out7;
Kmods SIG 63c143
 	}
Kmods SIG 63c143
diff --git a/src/ntfs_fs.h b/src/ntfs_fs.h
Kmods SIG 63c143
index dae6dd4ac6198fe735749b8e1405e110da4ddd62..6731b5d9e2d8efc742ce2200528e81eb22cbfa6e 100644
Kmods SIG 63c143
--- a/src/ntfs_fs.h
Kmods SIG 63c143
+++ b/src/ntfs_fs.h
Kmods SIG 63c143
@@ -465,7 +465,7 @@ bool al_remove_le(struct ntfs_inode *ni, struct ATTR_LIST_ENTRY *le);
Kmods SIG 63c143
 bool al_delete_le(struct ntfs_inode *ni, enum ATTR_TYPE type, CLST vcn,
Kmods SIG 63c143
 		  const __le16 *name, size_t name_len,
Kmods SIG 63c143
 		  const struct MFT_REF *ref);
Kmods SIG 63c143
-int al_update(struct ntfs_inode *ni);
Kmods SIG 63c143
+int al_update(struct ntfs_inode *ni, int sync);
Kmods SIG 63c143
 static inline size_t al_aligned(size_t size)
Kmods SIG 63c143
 {
Kmods SIG 63c143
 	return (size + 1023) & ~(size_t)1023;
Kmods SIG 63c143
@@ -606,7 +606,7 @@ int ntfs_sb_read(struct super_block *sb, u64 lbo, size_t bytes, void *buffer);
Kmods SIG 63c143
 int ntfs_sb_write(struct super_block *sb, u64 lbo, size_t bytes,
Kmods SIG 63c143
 		  const void *buffer, int wait);
Kmods SIG 63c143
 int ntfs_sb_write_run(struct ntfs_sb_info *sbi, const struct runs_tree *run,
Kmods SIG 63c143
-		      u64 vbo, const void *buf, size_t bytes);
Kmods SIG 63c143
+		      u64 vbo, const void *buf, size_t bytes, int sync);
Kmods SIG 63c143
 struct buffer_head *ntfs_bread_run(struct ntfs_sb_info *sbi,
Kmods SIG 63c143
 				   const struct runs_tree *run, u64 vbo);
Kmods SIG 63c143
 int ntfs_read_run_nb(struct ntfs_sb_info *sbi, const struct runs_tree *run,
Kmods SIG 63c143
diff --git a/src/xattr.c b/src/xattr.c
Kmods SIG 63c143
index a8c5a899f0dd308fe5014bf3b384bc903ca0bf68..5c7c5c7a5ec1607cbe37c5cc6a847fd04a0d0464 100644
Kmods SIG 63c143
--- a/src/xattr.c
Kmods SIG 63c143
+++ b/src/xattr.c
Kmods SIG 63c143
@@ -441,7 +441,7 @@ static noinline int ntfs_set_ea(struct inode *inode, const char *name,
Kmods SIG 63c143
 		/* Delete xattr, ATTR_EA */
Kmods SIG 63c143
 		ni_remove_attr_le(ni, attr, mi, le);
Kmods SIG 63c143
 	} else if (attr->non_res) {
Kmods SIG 63c143
-		err = ntfs_sb_write_run(sbi, &ea_run, 0, ea_all, size);
Kmods SIG 63c143
+		err = ntfs_sb_write_run(sbi, &ea_run, 0, ea_all, size, 0);
Kmods SIG 63c143
 		if (err)
Kmods SIG 63c143
 			goto out;
Kmods SIG 63c143
 	} else {
Kmods SIG 63c143
-- 
Kmods SIG 63c143
2.31.1
Kmods SIG 63c143