[LU-7579] (osd_handler.c:2683:osd_object_destroy()) ASSERTION( osd_inode_unlinked(inode) || inode->i_nlink == 1 || inode->i_nlink == 2 ) failed Created: 17/Dec/15 Updated: 28/Dec/22 Resolved: 13/Feb/16 |
|
| Status: | Resolved |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | Lustre 2.8.0 |
| Fix Version/s: | Lustre 2.8.0 |
| Type: | Bug | Priority: | Blocker |
| Reporter: | John Hammond | Assignee: | Alex Zhuravlev |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Attachments: |
|
||||
| Issue Links: |
|
||||
| Severity: | 3 | ||||
| Rank (Obsolete): | 9223372036854775807 | ||||
| Description |
# export MDSCOUNT=4 # llmount.sh ... # cd /mnt/lustre # mkdir d0 # exec 7<d0 # cd d0 # rmdir ../d0 # lfs mkdir -i1 d1 # exec 7>&- [ 130.331201] LustreError: 4033:0:(osd_handler.c:2683:osd_object_destroy()) ASSERTION( osd_inode_unlinked(inode) || inode->i_nlink == 1 || inode->i_nlink == 2 ) failed: [ 130.335818] LustreError: 4033:0:(osd_handler.c:2683:osd_object_destroy()) LBUG [ 130.338084] Pid: 4033, comm: mdt_rdpg00_001 [ 130.339427] [ 130.339429] Call Trace: [ 130.340776] [<ffffffffa09338b5>] libcfs_debug_dumpstack+0x55/0x80 [libcfs] [ 130.342927] [<ffffffffa0933eb7>] lbug_with_loc+0x47/0xb0 [libcfs] [ 130.344861] [<ffffffffa12aa9b1>] osd_object_destroy+0x5a1/0x5b0 [osd_ldiskfs] [ 130.346272] [<ffffffffa144b49d>] lod_sub_object_destroy+0x1fd/0x440 [lod] [ 130.347589] [<ffffffffa1440080>] lod_object_destroy+0x130/0x770 [lod] [ 130.348877] [<ffffffffa093f751>] ? libcfs_debug_msg+0x41/0x50 [libcfs] [ 130.350151] [<ffffffffa1336ca8>] mdd_close+0xa48/0xbf0 [mdd] [ 130.351286] [<ffffffffa139e1c9>] mdt_mfd_close+0x359/0x1980 [mdt] [ 130.352523] [<ffffffffa0aa4e3d>] ? class_handle_unhash_nolock+0x2d/0x150 [obdclass] [ 130.354034] [<ffffffffa139fa04>] mdt_close_internal+0x214/0x4f0 [mdt] [ 130.355298] [<ffffffffa139ff9a>] mdt_close+0x2ba/0x900 [mdt] [ 130.356495] [<ffffffffa0d538f7>] tgt_request_handle+0x907/0x14a0 [ptlrpc] [ 130.357874] [<ffffffffa0cfdd7a>] ptlrpc_main+0xdaa/0x18b0 [ptlrpc] [ 130.359089] [<ffffffff8105e59d>] ? finish_task_switch+0x7d/0x110 [ 130.360256] [<ffffffff8105e568>] ? finish_task_switch+0x48/0x110 [ 130.361445] [<ffffffff81553065>] ? thread_return+0x4e/0x7e9 [ 130.362538] [<ffffffff810b6b6d>] ? lock_release_holdtime+0x3d/0x190 [ 130.363791] [<ffffffffa0cfcfd0>] ? ptlrpc_main+0x0/0x18b0 [ptlrpc] [ 130.365028] [<ffffffff8109e856>] kthread+0x96/0xa0 [ 130.365935] [<ffffffff8100c30a>] child_rip+0xa/0x20 [ 130.366896] [<ffffffff8100bb10>] ? restore_args+0x0/0x30 [ 130.367938] [<ffffffff8109e7c0>] ? kthread+0x0/0xa0 [ 130.368911] [<ffffffff8100c300>] ? child_rip+0x0/0x20 [ 130.369926] |
| Comments |
| Comment by Di Wang [ 18/Dec/15 ] |
|
Hmm, this is an interesting question. Once the parent(on MDT0) becomes orphan, we should not be able to create any file or directory. So we need permanently record this orphan flag somewhere in the inode, another flag inside ldiskfs or add another EA, either way this will impact the performance. |
| Comment by Di Wang [ 18/Dec/15 ] |
|
how about store the orphan status in LMA, then get/set it through osd_attr_xxx()? other suggestion? |
| Comment by Andreas Dilger [ 21/Dec/15 ] |
|
Di, regarding your question in http://review.whamcloud.com/10274
These flags are direct mapping a from the EXT4_*_FL inode flags, so it is a bit tricky to add new values here, since most of them are checked by e2fsck. There is one flag - EXT4_IMAGIC_FL which means that the inode is disconnected and does not have a parent, but it also needs a superblock feature flag to be set to be valid. It is also possible to prevent new files to be created in a directory by setting the nlink count = 0, I think, and adding it to add the orphan inode list. However, that is pretty ldiskfs-specific. What about a "compat" flag in the LMA? Is that sent to the remote MDT? That would at least be consistent with ZFS and ldiskfs. |
| Comment by Di Wang [ 21/Dec/15 ] |
What about a "compat" flag in the LMA? Is that sent to the remote MDT? That would at least be consistent with ZFS and ldiskfs. That is what I thought as I well, but I am not sure if we should do this inside osd_attr_get/set(), i.e. get/set extra flags from LMA in osd_attr_get/set(), and input/output with lu_flags, or explicitly though get_xattr to retrieve these flags, which will definitely need extra RPC. |
| Comment by Alex Zhuravlev [ 21/Dec/15 ] |
|
it shouldn't be a problem to store additional EA - the directories usually have quite amount of free space in inode (given they don't store LOV). as for RPC RTT - we do have a notion of readahead for attributes/EAs/etc (already used by LFSCK), which can be employed by MDD to save RPC. |
| Comment by Andreas Dilger [ 22/Dec/15 ] |
|
Yes, LUSTRE_SLAVE_DEAD_FL seems like exactly the right thing? |
| Comment by Gerrit Updater [ 22/Dec/15 ] |
|
wangdi (di.wang@intel.com) uploaded a new patch: http://review.whamcloud.com/17715 |
| Comment by parinay v kondekar (Inactive) [ 28/Dec/15 ] |
|
| Comment by Peter Jones [ 19/Jan/16 ] |
| Comment by Gerrit Updater [ 13/Feb/16 ] |
|
Oleg Drokin (oleg.drokin@intel.com) merged in patch http://review.whamcloud.com/18024/ |
| Comment by Peter Jones [ 13/Feb/16 ] |
|
Landed for 2.8 |
| Comment by Gerrit Updater [ 13/Feb/16 ] |
|
Alex Zhuravlev (alexey.zhuravlev@intel.com) uploaded a new patch: http://review.whamcloud.com/18444 |
| Comment by Gerrit Updater [ 15/Feb/16 ] |
|
Oleg Drokin (oleg.drokin@intel.com) merged in patch http://review.whamcloud.com/18444/ |
| Comment by Gerrit Updater [ 28/Dec/22 ] |
|
"Etienne AUJAMES <eaujames@ddn.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/49524 |