Merge tag 'binfmt-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb...
[deliverable/linux.git] / drivers / watchdog / watchdog_dev.c
index 270f4bf291e3dfe95817a93f996cb3643ce90aac..040bf8382f46cd9c40673412339a8da672887594 100644 (file)
@@ -267,10 +267,12 @@ static int watchdog_stop(struct watchdog_device *wdd)
                return -EBUSY;
        }
 
-       if (wdd->ops->stop)
+       if (wdd->ops->stop) {
+               clear_bit(WDOG_HW_RUNNING, &wdd->status);
                err = wdd->ops->stop(wdd);
-       else
+       } else {
                set_bit(WDOG_HW_RUNNING, &wdd->status);
+       }
 
        if (err == 0) {
                clear_bit(WDOG_ACTIVE, &wdd->status);
@@ -972,17 +974,22 @@ int __init watchdog_dev_init(void)
        err = class_register(&watchdog_class);
        if (err < 0) {
                pr_err("couldn't register class\n");
-               return err;
+               goto err_register;
        }
 
        err = alloc_chrdev_region(&watchdog_devt, 0, MAX_DOGS, "watchdog");
        if (err < 0) {
                pr_err("watchdog: unable to allocate char dev region\n");
-               class_unregister(&watchdog_class);
-               return err;
+               goto err_alloc;
        }
 
        return 0;
+
+err_alloc:
+       class_unregister(&watchdog_class);
+err_register:
+       destroy_workqueue(watchdog_wq);
+       return err;
 }
 
 /*
This page took 0.026317 seconds and 5 git commands to generate.