path: root/fsmonitor.h
diff options
authorAlex Vandiver <>2017-11-09 19:58:10 (GMT)
committerJunio C Hamano <>2017-11-10 05:05:01 (GMT)
commit3bd28eb29912801481b293691039b05caebf13a3 (patch)
tree61498c30c6f2e4fcfd2bddc97c8bea893752d8e6 /fsmonitor.h
parent6f1dc21d983a495877c8054d41d9b634e234ccc4 (diff)
fsmonitor: store fsmonitor bitmap before splitting index
ba1b9cac ("fsmonitor: delay updating state until after split index is merged", 2017-10-27) resolved the problem of the fsmonitor data being applied to the non-base index when reading; however, a similar problem exists when writing the index. Specifically, writing of the fsmonitor extension happens only after the work to split the index has been applied -- as such, the information in the index is only for the non-"base" index, and thus the extension information contains only partial data. When saving, compute the ewah bitmap before the index is split, and store it in the fsmonitor_dirty field, mirroring the behavior that occurred during reading. fsmonitor_dirty is kept from being leaked by being freed when the extension data is written -- which always happens precisely once, no matter the split index configuration. Signed-off-by: Alex Vandiver <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'fsmonitor.h')
1 files changed, 8 insertions, 1 deletions
diff --git a/fsmonitor.h b/fsmonitor.h
index 0de644e..cd3cc0c 100644
--- a/fsmonitor.h
+++ b/fsmonitor.h
@@ -10,7 +10,14 @@ extern struct trace_key trace_fsmonitor;
extern int read_fsmonitor_extension(struct index_state *istate, const void *data, unsigned long sz);
- * Write the CE_FSMONITOR_VALID state into the fsmonitor index extension.
+ * Fill the fsmonitor_dirty ewah bits with their state from the index,
+ * before it is split during writing.
+ */
+extern void fill_fsmonitor_bitmap(struct index_state *istate);
+ * Write the CE_FSMONITOR_VALID state into the fsmonitor index
+ * extension. Reads from the fsmonitor_dirty ewah in the index.
extern void write_fsmonitor_extension(struct strbuf *sb, struct index_state *istate);