Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-16043

(osc_page.c:183:osc_page_delete()) LBUG

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Minor
    • Lustre 2.16.0
    • 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);
      	}
      
      

      Attachments

        Activity

          People

            vsaveliev Vladimir Saveliev
            vsaveliev Vladimir Saveliev
            Votes:
            0 Vote for this issue
            Watchers:
            8 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: