]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Fix a potential NULL dereference in md/raid1
authorNeil Brown <neilb@suse.de>
Sat, 26 Aug 2006 15:33:27 +0000 (17:33 +0200)
committerAdrian Bunk <bunk@stusta.de>
Sat, 26 Aug 2006 15:33:27 +0000 (17:33 +0200)
At the point where this 'atomic_add' is, rdev could be NULL,
as seen by the fact that we test for this in the very next
statement.
Further is it is really the wrong place of the add.
We could add to the count of corrected errors
once the are sure it was corrected, not before
trying to correct it.

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
drivers/md/raid1.c

index 5d88329e3c7a7e3bd3ff7240d358d2173e86a957..f0b7caa4a878b08b4c4ea0af2cbaf60d4c9d79c1 100644 (file)
@@ -1467,7 +1467,6 @@ static void raid1d(mddev_t *mddev)
                                                        d = conf->raid_disks;
                                                d--;
                                                rdev = conf->mirrors[d].rdev;
-                                               atomic_add(s, &rdev->corrected_errors);
                                                if (rdev &&
                                                    test_bit(In_sync, &rdev->flags)) {
                                                        if (sync_page_io(rdev->bdev,
@@ -1490,6 +1489,9 @@ static void raid1d(mddev_t *mddev)
                                                                         s<<9, conf->tmppage, READ) == 0)
                                                                /* Well, this device is dead */
                                                                md_error(mddev, rdev);
+                                                       else
+                                                               atomic_add(s, &rdev->corrected_errors);
+
                                                }
                                        }
                                } else {