Project

General

Profile

Bug #16066

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

Added by John Spray over 1 year ago. Updated 11 months ago.

Status:
Resolved
Priority:
High
Assignee:
-
Category:
Quotas
Target version:
-
Start date:
05/28/2016
Due date:
% Done:

0%

Source:
other
Tags:
Backport:
jewel
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Release:
Component(FS):
Client
Needs Doc:

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

Copied to fs - Backport #16313: jewel: client: FAILED assert(root_ancestor->qtree == __null) Resolved

History

#2 Updated by Zheng Yan over 1 year ago

  • Status changed from New to Verified

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.

#4 Updated by Zheng Yan over 1 year ago

  • Status changed from Verified to Need Review

#5 Updated by John Spray over 1 year ago

  • Status changed from Need Review to Pending Backport
  • Backport set to jewel

#6 Updated by Nathan Cutler over 1 year ago

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

#7 Updated by Greg Farnum about 1 year ago

  • Category changed from 46 to Quotas
  • Component(FS) Client added

#8 Updated by Loic Dachary 11 months ago

  • Status changed from Pending Backport to Resolved

Also available in: Atom PDF