The unwind code was not reversing operations correctly and was causing
a hang on any error condition.
Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
 
        err = ubi_eba_init_scan(ubi, si);
        if (err)
-               goto out_wl;
+               goto out_vtbl;
 
        err = ubi_wl_init_scan(ubi, si);
        if (err)
-               goto out_vtbl;
+               goto out_eba;
 
        ubi_scan_destroy_si(si);
        return 0;
 
+out_eba:
+       ubi_eba_close(ubi);
 out_vtbl:
        vfree(ubi->vtbl);
-out_wl:
-       ubi_wl_close(ubi);
 out_si:
        ubi_scan_destroy_si(si);
        return err;
 
        if (ubi->avail_pebs < WL_RESERVED_PEBS) {
                ubi_err("no enough physical eraseblocks (%d, need %d)",
                        ubi->avail_pebs, WL_RESERVED_PEBS);
+               err = -ENOSPC;
                goto out_free;
        }
        ubi->avail_pebs -= WL_RESERVED_PEBS;