diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c
index 2f9a5e3653e024012ea21a892afa494e5a7f4a86..88b867a0c173a754a7a173e70a736ca08bb87014 100644
--- a/drivers/mtd/ubi/wl.c
+++ b/drivers/mtd/ubi/wl.c
@@ -696,8 +696,13 @@ static void schedule_ubi_work(struct ubi_device *ubi, struct ubi_work *wrk)
 	list_add_tail(&wrk->list, &ubi->works);
 	ubi_assert(ubi->works_count >= 0);
 	ubi->works_count += 1;
-	if (ubi->thread_enabled)
-		wake_up_process(ubi->bgt_thread);
+
+	/*
+	 * U-Boot special: We have no bgt_thread in U-Boot!
+	 * So just call do_work() here directly.
+	 */
+	do_work(ubi);
+
 	spin_unlock(&ubi->wl_lock);
 }
 
diff --git a/include/ubi_uboot.h b/include/ubi_uboot.h
index 60f6a5fb4f53ed7464f1c5d3d53d088d501ef494..d2c90a6b44715b64f6fbf5df84e99ba1bc633018 100644
--- a/include/ubi_uboot.h
+++ b/include/ubi_uboot.h
@@ -123,7 +123,7 @@ typedef int	wait_queue_head_t;
 #define init_rwsem(...)			do { } while (0)
 #define down_read(...)			do { } while (0)
 #define down_write(...)			do { } while (0)
-#define down_write_trylock(...)		0
+#define down_write_trylock(...)		1
 #define up_read(...)			do { } while (0)
 #define up_write(...)			do { } while (0)