projects
/
bluesky.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
e2e469d
)
Make dropping of inodes from cache more resistant to races.
author
Michael Vrable
<mvrable@cs.ucsd.edu>
Fri, 19 Mar 2010 22:59:00 +0000
(15:59 -0700)
committer
Michael Vrable
<mvrable@cs.ucsd.edu>
Fri, 19 Mar 2010 22:59:00 +0000
(15:59 -0700)
bluesky/cache.c
patch
|
blob
|
history
diff --git
a/bluesky/cache.c
b/bluesky/cache.c
index
481390f
..
8d2cda1
100644
(file)
--- a/
bluesky/cache.c
+++ b/
bluesky/cache.c
@@
-58,15
+58,18
@@
static void flushd_inode(gpointer value, gpointer user_data)
drop_caches(inode);
/* If the only references are the one we hold and the one in the
drop_caches(inode);
/* If the only references are the one we hold and the one in the
- * filesystem inum->inode hash table...
The check for a
refcount
- *
of 2 shouldn't be necessary so it should be okay if there is a
- *
race on the che
ck. */
+ * filesystem inum->inode hash table...
First check the
refcount
+ *
without the lock for speed, but if the check looks good verify
+ *
it after taking the filesystem lo
ck. */
if (inode->refcount == 2) {
if (inode->refcount == 2) {
- g_log("bluesky/flushd", G_LOG_LEVEL_DEBUG,
- "Trying to drop inode %"PRIu64" from cache", inode->inum);
g_mutex_lock(fs->lock);
g_mutex_lock(fs->lock);
- if (g_hash_table_remove(fs->inodes, &inode->inum))
- bluesky_inode_unref(inode);
+ if (inode->refcount == 2) {
+ g_log("bluesky/flushd", G_LOG_LEVEL_DEBUG,
+ "Trying to drop inode %"PRIu64" from cache",
+ inode->inum);
+ if (g_hash_table_remove(fs->inodes, &inode->inum))
+ bluesky_inode_unref(inode);
+ }
g_mutex_unlock(fs->lock);
}
}
g_mutex_unlock(fs->lock);
}
}