This following patch solved the problem by calling iput at a different thread https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/ceph/inode.c?id=3e1d0452edceebb903d23db53201013c940bf000 but was reverted later because session mutex is no longer held when calling iput. In the comment of the above patch, it also points out: truncate_inode_pages_range() waits for readahead pages and In general, it's not good to call iput_final() inside MDS/OSD dispatch threads or while holding any mutex. Therefore, it looks like calling iput inside OSD dispatch thread is not safe. Any suggestion on this issue? thanks, ethan