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

Missing mutex_unlock in chlg_obd_get() error path causes deadlock

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Medium Medium
    • None
    • None
    • None
    • 3
    • 9223372036854775807

      chlg_obd_get() in lustre/mdc/mdc_changelog.c acquires chlg_registered_dev_lock but fails to release it when ced_obds list is empty, causing a deadlock for any subsequent caller that tries to acquire the same mutex.

       

      static inline struct obd_device* chlg_obd_get(struct chlg_registered_dev *dev)
      {
            struct obd_device *obd;
            mutex_lock(&chlg_registered_dev_lock);
            if (list_empty(&dev->ced_obds))
                return NULL;              // <-- mutex not released
            ...
            mutex_unlock(&chlg_registered_dev_lock);
            return obd;
      }

            skoyama Sohei Koyama
            skoyama Sohei Koyama
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: