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