Whamcloud - gitweb
LU-14267 osd: do not update inode each write 69/41069/3
authorAlex Zhuravlev <bzzz@whamcloud.com>
Tue, 22 Dec 2020 07:08:16 +0000 (10:08 +0300)
committerOleg Drokin <green@whamcloud.com>
Tue, 5 Jan 2021 08:27:20 +0000 (08:27 +0000)
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 <bzzz@whamcloud.com>
Change-Id: I47f463d9421cea7fb32e03fa5ba0ab6524511a29
Reviewed-on: https://review.whamcloud.com/41069
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
lustre/osd-ldiskfs/osd_io.c

index 7631d61..deaa0af 100644 (file)
@@ -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 */