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

OSS readcache page allocations can deadlock during local IO

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Minor
    • None
    • Lustre 2.14.0, Lustre 2.16.1
    • None
    • 3
    • 9223372036854775807

    Description

      OSS IO pages that are allocated for readcache can deadlock under memory pressure. As the comment says, this should try less hard for page cache allocations to avoid the deadlock:

              /* this could also try less hard for DT_BUFS_TYPE_READAHEAD pages */
              gfp_mask = rw & DT_BUFS_TYPE_LOCAL ? (GFP_NOFS | __GFP_HIGHMEM) :
                                                   GFP_HIGHUSER;
                      lnb->lnb_page = osd_get_page(env, dt, lnb->lnb_file_offset,
                                                   gfp_mask, cache);
      
      static struct page *osd_get_page(const struct lu_env *env, struct dt_object *dt, 
                                       loff_t offset, gfp_t gfp_mask, bool cache)
      {
              if (cache) {
                      page = find_or_create_page(inode->i_mapping,
                                                 offset >> PAGE_SHIFT, gfp_mask);
      

      Maybe __GFP_RETRY_MAYFAIL would be suitable to use in all cases, since the IO can always fall back to the per-thread buffer if the cache allocation fails.

      Attachments

        Issue Links

          Activity

            People

              adilger Andreas Dilger
              adilger Andreas Dilger
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated: