aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>2013-01-09 00:56:58 +0900
committerDaniel Phillips <daniel@tux3.org>2013-01-09 00:56:58 +0900
commit3913a8f7618854732a019409678b202872de976e (patch)
tree88ebe1f921dca49cc080e325360fe3771104d2c2
parenta4368d6c2dbae105abeef731efa3fdbd1c045282 (diff)
downloadlinux-tux3-3913a8f7618854732a019409678b202872de976e.tar.gz
tux3: Update document of locking rules in filemap.c
Update document of locking rules. This would still be not completed though, should be better than before. Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
-rw-r--r--fs/tux3/filemap.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/fs/tux3/filemap.c b/fs/tux3/filemap.c
index 52e50983432110..58486a477689c7 100644
--- a/fs/tux3/filemap.c
+++ b/fs/tux3/filemap.c
@@ -10,18 +10,35 @@
/*
* Locking order: Take care about memory allocation. (It may call our fs.)
- * FIXME: fill locking rule
*
- * down_write(itable: btree->lock) (open_inode)
- * down_read(itable: btree->lock) (make_inode, save_inode)
+ * down_write(itable: btree->lock) (alloc_inum, save_inode, purge_inode)
+ * down_read(itable: btree->lock) (open_inode)
+ *
+ * down_write(otable: btree->lock) (tux3_rollup_orphan_add,
+ * tux3_rollup_orphan_del,
+ * load_otable_orphan)
*
* down_write(inode: btree->lock) (btree_chop, map_region for write)
* down_read(inode: btree->lock) (map_region for read)
*
+ * inode->i_mutex
+ * mapping->private_lock (front uses to protect dirty buffer list)
+ * tuxnode->hole_extents_lock (for inode->hole_extents,
+ * i_ddc->dirty_holes is protected by ->i_mutex)
+ *
+ * inode->i_lock
+ * tuxnode->lock (to protect tuxnode data)
+ * tuxnode->dirty_inodes_lock (for i_ddc->dirty_inodes,
+ * Note: timestamp can be updated
+ * outside inode->i_mutex)
+ *
+ * sb->forked_buffers (for sb->forked_buffers)
+ *
* This lock may be first lock except vfs locks (lock_super, i_mutex).
* sb->delta_lock (change_begin, change_end) [only for DISABLE_ASYNC_BACKEND]
*
* memory allocation: (blockread, blockget, kmalloc, etc.)
+ * FIXME: fill here, what functions/locks are used via memory reclaim path
*
* So, to prevent reentering into our fs recursively by memory reclaim
* from memory allocation, lower layer wouldn't use __GFP_FS.