From 620152339fe18f3a3cc317ab05a7e34adcc68098 Mon Sep 17 00:00:00 2001 From: Alex Zhuravlev Date: Tue, 22 Dec 2020 10:08:16 +0300 Subject: [PATCH] LU-14267 osd: do not update inode each write there is no need to update in-bh inode each write, overwrites can skip that. otherwise: 1) transaction can exceed reserved credits as osd_declare_write() doesn't count inode for overwrites 2) copy is not free and this can be called few times for each operation: last_rcvd data, changelog. Fixes: a23aac2219 ("LU-13416 ldiskfs: don't corrupt data on journal replay") Signed-off-by: Alex Zhuravlev Change-Id: I47f463d9421cea7fb32e03fa5ba0ab6524511a29 Reviewed-on: https://review.whamcloud.com/41069 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Mike Pershin --- lustre/osd-ldiskfs/osd_io.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lustre/osd-ldiskfs/osd_io.c b/lustre/osd-ldiskfs/osd_io.c index 7631d61..deaa0af 100644 --- a/lustre/osd-ldiskfs/osd_io.c +++ b/lustre/osd-ldiskfs/osd_io.c @@ -1921,7 +1921,8 @@ static int osd_ldiskfs_write_record(struct dt_object *dt, void *buf, ++bufsize; } - dirty_inode = test_and_set_bit(LDISKFS_INODE_JOURNAL_DATA, + /* only the first flag-set matters */ + dirty_inode = !test_and_set_bit(LDISKFS_INODE_JOURNAL_DATA, &ei->i_flags); /* sparse checking is racy, but sparse is very rare case, leave as is */ -- 1.8.3.1