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

ll_update_inode uses body->fid1 before checking that OBD_MD_FLID is set

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Minor
    • None
    • Lustre 2.4.0, Lustre 2.15.0
    • None
    • 3
    • 7963

    Description

      This is not a bug I currently see in practice but the logic should be fixed as explained below. Probably OBD_MD_FLID is always set.

      In ll_update_inode() ino and generation are set up top

      inode->i_ino = cl_fid_build_ino(&body->fid1, ll_need_32bit_api(sbi));
      inode->i_generation = cl_fid_build_gen(&body->fid1);
      

      and later we check OBD_MD_FLID

              if (body->valid & OBD_MD_FLID) {
                      /* FID shouldn't be changed! */
      		if (fid_is_sane(&lli->lli_fid)) {
                              LASSERTF(lu_fid_eq(&lli->lli_fid, &body->fid1),
                                       "Trying to change FID "DFID
                                       " to the "DFID", inode %lu/%u(%p)\n",
                                       PFID(&lli->lli_fid), PFID(&body->fid1),
                                       inode->i_ino, inode->i_generation, inode);
      		} else
                              lli->lli_fid = body->fid1;
              }
      

      So if the wrong fid is applied to the object (as in LU-2523) then the assertion prints the wrong ino and generation.

      Attachments

        Activity

          People

            wc-triage WC Triage
            jhammond John Hammond
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: