Bounce buffer deadlock

From: Steve Lord (lord@sgi.com)
Date: Fri Jun 29 2001 - 15:33:52 EST


Has anyone else seen a hang like this:

  bdflush()
    flush_dirty_buffers()
      ll_rw_block()
        submit_bh(buffer X)
          generic_make_request()
            __make_request()
                create_bounce()
                  alloc_bounce_page()
                    alloc_page()
                      try_to_free_pages()
                        do_try_to_free_pages()
                          page_launder()
                            try_to_free_buffers( , 2) -- i.e. wait for buffers
                              sync_page_buffers()
                                __wait_on_buffer(buffer X)

Where the buffer head X going in the top of the stack is the same as the one
we wait on at the bottom.

There still seems to be nothing to prevent the try to free buffers from
blocking on a buffer like this. Setting a flag on the buffer around the
create_bounce call, and skipping it in the try_to_free_buffers path would
be one approach to avoiding this.

I hit this in 2.4.6-pre6, and I don't see anything in the ac series to protect
against it.

Steve

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Jun 30 2001 - 21:00:23 EST