]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
client: _readdir_cache_cb() may use the readdir_cache already clear 30934/head
authorhuanwen ren <ren.huanwen@zte.com.cn>
Wed, 7 Aug 2019 16:49:23 +0000 (00:49 +0800)
committerNathan Cutler <ncutler@suse.com>
Tue, 15 Oct 2019 09:41:16 +0000 (11:41 +0200)
commitb09ce15993eb1651fab5d5e371539a7cacda9a7c
tree4b4d9bc0fa0c580cc6f26b3922dd057da1aebd7c
parent6b3ac130b9ebbc4ecda4bf5011908f56aa38f211
client: _readdir_cache_cb() may use the readdir_cache already clear

Calling function _readdir_cache_cb() means to get dir information from the cache, but in the while loop,
the contents of readdir_cache are not static.

For example, _getattr() will trigger insert_trace to update readdir_cache, such as:
1. insert_trace()->clear_dir_complete_and_ordered() or
2. insert_trace()->add_update_inode()->add_update_cap()-> check_cap_issue()->clear_dir_complete_and_ordered()
So, there is a possibility that dn is empty after the _getattr() call.

Fixes: http://tracker.ceph.com/issues/41148
Signed-off-by: huanwen ren <ren.huanwen@zte.com.cn>
(cherry picked from commit 404c06784e46016703104db59ea73f36d09b578b)
src/client/Client.cc