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

OSD ID mapping cache is not safe to use.

Details

    • Bug
    • Resolution: Fixed
    • Critical
    • Lustre 2.8.0
    • Lustre 2.7.0
    • None
    • 3
    • 9223372036854775807

    Description

      t seems osd_id_map is not safe to use right now. So the pair of [FID, OID] is added to cache after lookup, but if another thread delete the object, it will only invalidate the cache in its own thread info.

      int osd_oi_delete(struct osd_thread_info *info,
                        struct osd_device *osd, const struct lu_fid *fid,
                        handle_t *th, enum oi_check_flags flags)
      {
              struct lu_fid *oi_fid = &info->oti_fid2;
      
              /* clear idmap cache */
              if (lu_fid_eq(fid, &info->oti_cache.oic_fid))
                      fid_zero(&info->oti_cache.oic_fid);
            ..............
      
      

      And other threads can still get the OID from the cache, and if the inode has been reused by other object, then we will see bunch of

      Lustre: lustre-MDT0003-osd: FID [0x2c0000404:0x1f34:0x0] != self_fid [0x2c0000404:0x281c:0x0]
      

      Unfortunately, it will also trigger osd-scrub in this case, this is what I saw in the DNE2 failover test.

      Attachments

        Activity

          People

            yong.fan nasf (Inactive)
            di.wang Di Wang
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: