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

cfs_delete_from_page_cache() should not unlock page

Details

    • Bug
    • Resolution: Fixed
    • Major
    • Lustre 2.17.0
    • None
    • None
    • 3
    • 9223372036854775807

    Description

      cfs_delete_from_page_cache() had to be implemented because  delete_from_page_cache() Kernel external is no longer available in recent Kernels, this has started with upstream Kernel v5.16-rc4 and has been addressed by LU-16292 and fixed in associated Gerrit #49069.

      Looking more closely to cfs_delete_from_page_cache() code :

      /**
       * delete_from_page_cache is not exported anymore
       */
      #ifdef HAVE_DELETE_FROM_PAGE_CACHE
      #define cfs_delete_from_page_cache(page)        delete_from_page_cache((page))
      #else
      static inline void cfs_delete_from_page_cache(struct page *page)
      {
              if (!page->mapping)
                      return;
              LASSERT(PageLocked(page));
              get_page(page);
              unlock_page(page);
              /* on entry page is locked */
              if (S_ISREG(page->mapping->host->i_mode)) {
                      generic_error_remove_folio(page->mapping, page_folio(page));
              } else {
                      loff_t lstart = page->index << PAGE_SHIFT;
                      loff_t lend = lstart + PAGE_SIZE - 1;
      
      
                      truncate_inode_pages_range(page->mapping, lstart, lend);
              }
              lock_page(page);
              put_page(page);
      }
      #endif 

      and also to other places where generic_error_remove_folio() is also being called, in both Lustre and Kernel, I have strong assumptions that page should not be unlocked prior to call it..., this may cause a race where page->mapping may become NULL !

      I will cook a patch soon in this direction.

      Attachments

        Issue Links

          Activity

            [LU-19113] cfs_delete_from_page_cache() should not unlock page
            pjones Peter Jones added a comment -

            Merged for 2.17

            pjones Peter Jones added a comment - Merged for 2.17

            "Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/59829/
            Subject: LU-19113 llite: cfs_delete_from_page_cache() keep page locked
            Project: fs/lustre-release
            Branch: master
            Current Patch Set:
            Commit: 3dec26990738ad3f5008d46ee9d3d03df7454925

            gerrit Gerrit Updater added a comment - "Oleg Drokin <green@whamcloud.com>" merged in patch https://review.whamcloud.com/c/fs/lustre-release/+/59829/ Subject: LU-19113 llite: cfs_delete_from_page_cache() keep page locked Project: fs/lustre-release Branch: master Current Patch Set: Commit: 3dec26990738ad3f5008d46ee9d3d03df7454925

            "Bruno Faccini <bfaccini@nvidia.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/59829
            Subject: LU-19113 llite: cfs_delete_from_page_cache() keep page locked
            Project: fs/lustre-release
            Branch: master
            Current Patch Set: 1
            Commit: 40a46d92556a0afbd873c9af8e6418d82ce45f51

            gerrit Gerrit Updater added a comment - "Bruno Faccini <bfaccini@nvidia.com>" uploaded a new patch: https://review.whamcloud.com/c/fs/lustre-release/+/59829 Subject: LU-19113 llite: cfs_delete_from_page_cache() keep page locked Project: fs/lustre-release Branch: master Current Patch Set: 1 Commit: 40a46d92556a0afbd873c9af8e6418d82ce45f51

            People

              bfaccini-nvda Bruno Faccini
              bfaccini-nvda Bruno Faccini
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: