Project

General

Profile

Actions

Bug #16066

closed

client: FAILED assert(root_ancestor->qtree == __null)

Added by John Spray almost 8 years ago. Updated about 5 years ago.

Status:
Resolved
Priority:
High
Assignee:
-
Category:
-
Target version:
-
% Done:

0%

Source:
other
Tags:
Backport:
jewel
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(FS):
Client
Labels (FS):
quotas
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Description

Seen on test branch where client quota was enabled by default (https://github.com/ceph/ceph/pull/9346) -- presumably this is an existing bug that we didn't notice because we don't usually have client quota enabled during testing.

Assertion: client/Client.cc: 12008: FAILED assert(root_ancestor->qtree == __null)
ceph version 10.2.0-1432-g387a52d (387a52daef4fba042dfd041a54544090a3754abf)
 1: (ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x85) [0x55e99159efa5]
 2: (Client::get_quota_root(Inode*)+0x7b2) [0x55e9913c4cb2]
 3: (Client::check_quota_condition(Inode*, std::function<bool (Inode const&)>)+0x3d) [0x55e9913c530d]
 4: (Client::is_quota_files_exceeded(Inode*)+0x5e) [0x55e9913c53be]
 5: (Client::_mkdir(Inode*, char const*, unsigned int, int, int, boost::intrusive_ptr<Inode>*)+0xd3) [0x55e9913f2b23]
 6: (Client::ll_mkdir(Inode*, char const*, unsigned int, stat*, Inode**, int, int)+0xfb) [0x55e9913f353b]
 7: (()+0x19ad72) [0x55e991396d72]
 8: (()+0x16bdb) [0x7f62351bebdb]
 9: (()+0x13471) [0x7f62351bb471]
 10: (()+0x7dc5) [0x7f6234614dc5]
 11: (clone()+0x6d) [0x7f62334faced]

Related issues 1 (0 open1 closed)

Copied to CephFS - Backport #16313: jewel: client: FAILED assert(root_ancestor->qtree == __null)ResolvedXiaoxi ChenActions
Actions #2

Updated by Zheng Yan almost 8 years ago

  • Status changed from New to 12

The quota code expects that directory is alway connected to the FS hierarchy. But this is not true, we can create disconnected directory inode by

Client1> mkdir testdir
Client1> cd testdir
Client1> setfattr -n ceph.quota.max_files -n 100 .
Client1> mkdir dir1

Client2> cd testdir/dir1

Client1> mv dir1 dir2
Client1> mkdir dir1

Client2> stat ../dir1
Client2> seq 1 200 | xargs touch // ceph-fuse crashes

This issue is difficult to handle. For now, we can use lookup-parent request to reconnect the directory. The long-term solution should be something like snaprealm.

Actions #4

Updated by Zheng Yan almost 8 years ago

  • Status changed from 12 to Fix Under Review
Actions #5

Updated by John Spray almost 8 years ago

  • Status changed from Fix Under Review to Pending Backport
  • Backport set to jewel
Actions #6

Updated by Nathan Cutler almost 8 years ago

  • Copied to Backport #16313: jewel: client: FAILED assert(root_ancestor->qtree == __null) added
Actions #7

Updated by Greg Farnum almost 8 years ago

  • Category changed from 46 to 97
  • Component(FS) Client added
Actions #8

Updated by Loïc Dachary over 7 years ago

  • Status changed from Pending Backport to Resolved
Actions #9

Updated by Patrick Donnelly about 5 years ago

  • Category deleted (97)
  • Labels (FS) quotas added
Actions

Also available in: Atom PDF