static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10bio *r10_bio)
 {
        int sect = 0; /* Offset from r10_bio->sector */
-       int sectors = r10_bio->sectors;
+       int sectors = r10_bio->sectors, slot = r10_bio->read_slot;
        struct md_rdev *rdev;
        int max_read_errors = atomic_read(&mddev->max_corr_read_errors);
-       int d = r10_bio->devs[r10_bio->read_slot].devnum;
+       int d = r10_bio->devs[slot].devnum;
 
        /* still own a reference to this rdev, so it cannot
         * have been cleared recently.
                pr_notice("md/raid10:%s: %pg: Failing raid device\n",
                          mdname(mddev), rdev->bdev);
                md_error(mddev, rdev);
-               r10_bio->devs[r10_bio->read_slot].bio = IO_BLOCKED;
+               r10_bio->devs[slot].bio = IO_BLOCKED;
                return;
        }
 
        while(sectors) {
                int s = sectors;
-               int sl = r10_bio->read_slot;
+               int sl = slot;
                int success = 0;
                int start;
 
                        sl++;
                        if (sl == conf->copies)
                                sl = 0;
-               } while (!success && sl != r10_bio->read_slot);
+               } while (!success && sl != slot);
                rcu_read_unlock();
 
                if (!success) {
                         * as bad on the first device to discourage future
                         * reads.
                         */
-                       int dn = r10_bio->devs[r10_bio->read_slot].devnum;
+                       int dn = r10_bio->devs[slot].devnum;
                        rdev = conf->mirrors[dn].rdev;
 
                        if (!rdev_set_badblocks(
                                    rdev,
-                                   r10_bio->devs[r10_bio->read_slot].addr
+                                   r10_bio->devs[slot].addr
                                    + sect,
                                    s, 0)) {
                                md_error(mddev, rdev);
-                               r10_bio->devs[r10_bio->read_slot].bio
+                               r10_bio->devs[slot].bio
                                        = IO_BLOCKED;
                        }
                        break;
                start = sl;
                /* write it back and re-read */
                rcu_read_lock();
-               while (sl != r10_bio->read_slot) {
+               while (sl != slot) {
                        if (sl==0)
                                sl = conf->copies;
                        sl--;
                        rcu_read_lock();
                }
                sl = start;
-               while (sl != r10_bio->read_slot) {
+               while (sl != slot) {
                        if (sl==0)
                                sl = conf->copies;
                        sl--;