err = do_sync_erase(ubi, e1, vol_id, lnum, 0);
        if (err) {
-               if (e2)
+               if (e2) {
+                       spin_lock(&ubi->wl_lock);
                        wl_entry_destroy(ubi, e2);
+                       spin_unlock(&ubi->wl_lock);
+               }
                goto out_ro;
        }
 
                /* Re-schedule the LEB for erasure */
                err1 = schedule_erase(ubi, e, vol_id, lnum, 0, false);
                if (err1) {
+                       spin_lock(&ubi->wl_lock);
                        wl_entry_destroy(ubi, e);
+                       spin_unlock(&ubi->wl_lock);
                        err = err1;
                        goto out_ro;
                }
                return err;
        }
 
+       spin_lock(&ubi->wl_lock);
        wl_entry_destroy(ubi, e);
+       spin_unlock(&ubi->wl_lock);
        if (err != -EIO)
                /*
                 * If this is not %-EIO, we have no idea what to do. Scheduling