Project

General

Profile

Actions

Bug #41327

open

mds: dirty rstat lost during scatter-gather process

Added by Xuehan Xu over 4 years ago. Updated over 3 years ago.

Status:
Fix Under Review
Priority:
Normal
Assignee:
Category:
Correctness/Safety
Target version:
% Done:

0%

Source:
Community (dev)
Tags:
Backport:
pacific,octopus,nautilus
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(FS):
Labels (FS):
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Description

In the following scenario, the current lock's dirty state could be lost:

  1. 1. current lock's state is LOCK_LOCK;
  2. 2. auth send LOCK_AC_MIX, and the current lock do finish_scatter_update, which wrlock_force the current lock;
  3. 3. auth send LOCK_AC_LOCK, and would be forced to wait, since the current lock is wrlocked;
  4. 4. the child inode want to pop rstat up to the current lock's parent, which would also be forced to wait since the current lock state is LOCK_MIX_LOCK; the current lock would be marked dirty, and the child inode would be attached to the corresponding dir's dirty_rstat_inodes;
  5. 5. the previous finish_scatter_update finishes, the codes reaches here and "start_flush" the current lock, which would clear the dirty flag of the current lock.

As the CInode::encode_lock_state method doesn't pop dirty_rstat_inodes' rstat to the corresponding dir, step 5 actually lead to the lost of the dirty state marked by step 4.

Actions #1

Updated by Patrick Donnelly over 4 years ago

  • Status changed from New to Fix Under Review
  • Assignee set to Xuehan Xu
Actions #2

Updated by Patrick Donnelly about 4 years ago

  • Target version changed from v15.0.0 to v16.0.0
Actions #3

Updated by Patrick Donnelly over 3 years ago

  • Target version changed from v16.0.0 to v17.0.0
  • Backport set to pacific,octopus,nautilus
Actions

Also available in: Atom PDF