projects
/
bluesky.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
In-progress work on better cache flushing.
[bluesky.git]
/
bluesky
/
cache.c
diff --git
a/bluesky/cache.c
b/bluesky/cache.c
index
8d2cda1
..
211c2b9
100644
(file)
--- a/
bluesky/cache.c
+++ b/
bluesky/cache.c
@@
-28,10
+28,14
@@
static void writeback_complete(gpointer a, gpointer i)
g_mutex_lock(inode->lock);
inode->change_commit = inode->change_pending;
g_mutex_lock(inode->lock);
inode->change_commit = inode->change_pending;
+ inode->change_pending = 0;
if (inode->change_count == inode->change_commit) {
/* If inode is no longer dirty... */
inode->change_time = 0;
if (inode->change_count == inode->change_commit) {
/* If inode is no longer dirty... */
inode->change_time = 0;
- inode->change_pending = 0;
+ g_mutex_lock(inode->fs->lock);
+ bluesky_list_unlink(&inode->fs->dirty_list, inode->dirty_list);
+ inode->dirty_list = NULL;
+ g_mutex_unlock(inode->fs->lock);
}
g_mutex_unlock(inode->lock);
}
g_mutex_unlock(inode->lock);
@@
-70,6
+74,12
@@
static void flushd_inode(gpointer value, gpointer user_data)
if (g_hash_table_remove(fs->inodes, &inode->inum))
bluesky_inode_unref(inode);
}
if (g_hash_table_remove(fs->inodes, &inode->inum))
bluesky_inode_unref(inode);
}
+ bluesky_list_unlink(&inode->fs->accessed_list,
+ inode->accessed_list);
+ inode->accessed_list = NULL;
+ bluesky_list_unlink(&inode->fs->dirty_list,
+ inode->dirty_list);
+ inode->dirty_list = NULL;
g_mutex_unlock(fs->lock);
}
}
g_mutex_unlock(fs->lock);
}
}