Details
-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
None
-
3
-
9223372036854775807
Description
[ 418.712805] LustreError: 12744:0:(osc_page.c:182:osc_page_delete()) Trying to teardown failed: -16 [ 418.715341] LustreError: 12744:0:(osc_page.c:183:osc_page_delete()) ASSERTION( 0 ) failed: [ 418.717901] LustreError: 12744:0:(osc_page.c:183:osc_page_delete()) LBUG [ 418.719937] Pid: 12744, comm: rm 3.10.0-1160.71.1.el7.x86_64 #1 SMP Sun Jul 24 17:13:36 MSK 2022 [ 418.722849] Call Trace: [ 418.723845] [<0>] libcfs_call_trace+0x90/0xf0 [libcfs] [ 418.725936] [<0>] lbug_with_loc+0x4c/0xa0 [libcfs] [ 418.729036] [<0>] osc_page_delete+0x49b/0x500 [osc] [ 418.732641] [<0>] cl_page_delete0+0x85/0x320 [obdclass] [ 418.734915] [<0>] cl_page_delete+0x33/0x110 [obdclass] [ 418.736796] [<0>] ll_invalidatepage+0x7f/0x170 [lustre] [ 418.738250] [<0>] do_invalidatepage_range+0x7d/0x90 [ 418.739724] [<0>] truncate_inode_page+0x77/0x80 [ 418.741012] [<0>] truncate_inode_pages_range+0x1ea/0x750 [ 418.742643] [<0>] truncate_inode_pages_final+0x4f/0x60 [ 418.744691] [<0>] ll_truncate_inode_pages_final+0x21/0xe0 [lustre] [ 418.746819] [<0>] ll_delete_inode+0x38/0x150 [lustre] [ 418.748201] [<0>] evict+0xb4/0x180 [ 418.749416] [<0>] iput+0xfc/0x190 [ 418.750516] [<0>] do_unlinkat+0x1ae/0x2d0
The above happens on unlink if
ll_delete_inode->cl_sync_file_range->cl_io_loop->cl_io_start does not process all slices:
cl_sync_file_range() cl_io_loop() cl_io_start() list_for_each_entry(scan, &io->ci_layers, cis_linkage) { result = scan->cis_iop->op[io->ci_type].cio_start(env, scan); osc_io_fsync_start(); if (result != 0) break;
if osc_io_fsync_start() fails for first stripe, second stripe does not get its dirty pages discarded, which makes ll_invalidatepage->osc_page_delete() to fail on a page of second stripe:
static void osc_page_delete(const struct lu_env *env, ... rc = osc_teardown_async_page(env, obj, opg); if (rc) { CL_PAGE_DEBUG(D_ERROR, env, slice->cpl_page, "Trying to teardown failed: %d\n", rc); LASSERT(0); }