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

ldlm_handle_cp_callback() RETURN() among GOTO(out, ...)s.

    XMLWordPrintable

Details

    • Bug
    • Resolution: Not a Bug
    • Minor
    • None
    • None
    • None
    • 3
    • 9223372036854775807

    Description

      7fff052c930da4822c3b2a13d130da7473a20a58 (https://review.whamcloud.com/19898 LU-7791 ldlm: signal vs CP callback race) adds to ldlm_handle_cp_callback() a RETURN() among many GOTO(out, ...)s. As a result there is no wake_up(&lock->l_waitq).

              if (!ldlm_res_eq(&dlm_req->lock_desc.l_resource.lr_name,
                               &lock->l_resource->lr_name)) {
                      ldlm_resource_unlink_lock(lock);
                      unlock_res_and_lock(lock);
                      rc = ldlm_lock_change_resource(ns, lock,
                                      &dlm_req->lock_desc.l_resource.lr_name);
      		if (rc < 0) {
                              LDLM_ERROR(lock, "Failed to allocate resource");
                              GOTO(out, rc);
                      }
                      LDLM_DEBUG(lock, "completion AST, new resource");
                      lock_res_and_lock(lock);
              }
      
              if (ldlm_is_failed(lock)) {
      		unlock_res_and_lock(lock);
                      LDLM_LOCK_RELEASE(lock);
                      RETURN(-EINVAL);
              }
      
              if (ldlm_is_destroyed(lock) ||
                  ldlm_is_granted(lock)) {
                      /* b=11300: the lock has already been granted */
                      unlock_res_and_lock(lock);
                      LDLM_DEBUG(lock, "Double grant race happened");
                      GOTO(out, rc = 0);
              }
      
      ...
      out:
              if (rc < 0) {
                      lock_res_and_lock(lock);
      		ldlm_set_failed(lock);
                      unlock_res_and_lock(lock);
                      wake_up(&lock->l_waitq);
              }
              LDLM_LOCK_RELEASE(lock);
      
              return 0;
      }
      

      Is this correct?

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: