]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/md/md.c
[PATCH] v4l: 761: fixed registry value in em2820
[karo-tx-linux.git] / drivers / md / md.c
index e9476075aa13df5c098a776027fd4aa4dfcb18ed..9ecf51ee596fb296f64a75f8372828e0d2701012 100644 (file)
@@ -3466,8 +3466,8 @@ static int is_mddev_idle(mddev_t *mddev)
        idle = 1;
        ITERATE_RDEV(mddev,rdev,tmp) {
                struct gendisk *disk = rdev->bdev->bd_contains->bd_disk;
-               curr_events = disk_stat_read(disk, read_sectors) + 
-                               disk_stat_read(disk, write_sectors) - 
+               curr_events = disk_stat_read(disk, sectors[0]) + 
+                               disk_stat_read(disk, sectors[1]) - 
                                atomic_read(&disk->sync_io);
                /* Allow some slack between valud of curr_events and last_events,
                 * as there are some uninteresting races.
@@ -3568,7 +3568,8 @@ static void md_do_sync(mddev_t *mddev)
                mddev->curr_resync = 2;
 
        try_again:
-               if (signal_pending(current)) {
+               if (signal_pending(current) ||
+                   kthread_should_stop()) {
                        flush_signals(current);
                        set_bit(MD_RECOVERY_INTR, &mddev->recovery);
                        goto skip;
@@ -3590,8 +3591,9 @@ static void md_do_sync(mddev_t *mddev)
                                         */
                                        continue;
                                prepare_to_wait(&resync_wait, &wq, TASK_INTERRUPTIBLE);
-                               if (!signal_pending(current)
-                                   && mddev2->curr_resync >= mddev->curr_resync) {
+                               if (!signal_pending(current) &&
+                                   !kthread_should_stop() &&
+                                   mddev2->curr_resync >= mddev->curr_resync) {
                                        printk(KERN_INFO "md: delaying resync of %s"
                                               " until %s has finished resync (they"
                                               " share one or more physical units)\n",
@@ -3697,7 +3699,7 @@ static void md_do_sync(mddev_t *mddev)
                }
 
 
-               if (signal_pending(current)) {
+               if (signal_pending(current) || kthread_should_stop()) {
                        /*
                         * got a signal, exit.
                         */