Project

General

Profile

Bug #16066

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

Added by John Spray 9 months ago. Updated 5 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 Backport #16313: jewel: client: FAILED assert(root_ancestor->qtree == __null) Resolved

History

#2 Updated by Zheng Yan 9 months 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 9 months ago

  • Status changed from Verified to Need Review

#5 Updated by John Spray 9 months ago

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

#6 Updated by Nathan Cutler 9 months ago

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

#7 Updated by Greg Farnum 8 months ago

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

#8 Updated by Loic Dachary 5 months ago

  • Status changed from Pending Backport to Resolved

Also available in: Atom PDF