At that point, the request already auth pins and locks some objects.
So CDir::fetch() should ignore the can_auth_pin check and continue
to fetch freezing dir.
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
assert(dir->is_auth());
if (!dir->is_complete()) {
+ if (dir->is_frozen()) {
+ dout(7) << "dir is frozen " << *dir << dendl;
+ dir->add_waiter(CDir::WAIT_UNFREEZE, new C_MDS_RetryRequest(mdcache, mdr));
+ return;
+ }
// fetch
dout(10) << " incomplete dir contents for readdir on " << *dir << ", fetching" << dendl;
- dir->fetch(new C_MDS_RetryRequest(mdcache, mdr));
+ dir->fetch(new C_MDS_RetryRequest(mdcache, mdr), true);
return;
}