[PATCH] md: provide proper rcu_dereference / rcu_assign_pointer annotations in md
[deliverable/linux.git] / drivers / md / raid5.c
index ce154553aca57d3cd981c3df81e94650bd186520..061d265ed94ee85cc892e1fb02a379e7437cec42 100644 (file)
@@ -1374,7 +1374,7 @@ static void handle_stripe(struct stripe_head *sh)
                        bi->bi_end_io = raid5_end_read_request;
  
                rcu_read_lock();
-               rdev = conf->disks[i].rdev;
+               rdev = rcu_dereference(conf->disks[i].rdev);
                if (rdev && rdev->faulty)
                        rdev = NULL;
                if (rdev)
@@ -1448,7 +1448,7 @@ static void unplug_slaves(mddev_t *mddev)
 
        rcu_read_lock();
        for (i=0; i<mddev->raid_disks; i++) {
-               mdk_rdev_t *rdev = conf->disks[i].rdev;
+               mdk_rdev_t *rdev = rcu_dereference(conf->disks[i].rdev);
                if (rdev && !rdev->faulty && atomic_read(&rdev->nr_pending)) {
                        request_queue_t *r_queue = bdev_get_queue(rdev->bdev);
 
@@ -1493,7 +1493,7 @@ static int raid5_issue_flush(request_queue_t *q, struct gendisk *disk,
 
        rcu_read_lock();
        for (i=0; i<mddev->raid_disks && ret == 0; i++) {
-               mdk_rdev_t *rdev = conf->disks[i].rdev;
+               mdk_rdev_t *rdev = rcu_dereference(conf->disks[i].rdev);
                if (rdev && !rdev->faulty) {
                        struct block_device *bdev = rdev->bdev;
                        request_queue_t *r_queue = bdev_get_queue(bdev);
@@ -2165,7 +2165,7 @@ static int raid5_add_disk(mddev_t *mddev, mdk_rdev_t *rdev)
                        found = 1;
                        if (rdev->saved_raid_disk != disk)
                                conf->fullsync = 1;
-                       p->rdev = rdev;
+                       rcu_assign_pointer(p->rdev, rdev);
                        break;
                }
        print_raid5_conf(conf);
This page took 0.025505 seconds and 5 git commands to generate.