]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] (10/15) big struct block_device * push (first series)
authorAlexander Viro <viro@math.psu.edu>
Thu, 25 Apr 2002 06:50:35 +0000 (23:50 -0700)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Thu, 25 Apr 2002 06:50:35 +0000 (23:50 -0700)
 - md/linear.c - bring struct block_device * into private data.

drivers/md/linear.c
include/linux/raid/linear.h

index b65a67357e1d4d266e6f5e0ba33cc4cb31652295..947c92920278345cd5cb785a517fbdf326622cca 100644 (file)
@@ -56,6 +56,8 @@ static int linear_run (mddev_t *mddev)
                dev_info_t *disk = conf->disks + j;
 
                disk->dev = rdev->dev;
+               disk->bdev = rdev->bdev;
+               atomic_inc(&rdev->bdev->bd_count);
                disk->size = rdev->size;
                disk->offset = curr_offset;
 
@@ -101,8 +103,12 @@ static int linear_run (mddev_t *mddev)
        return 0;
 
 out:
-       if (conf)
+       if (conf) {
+               for (i = 0; i < MD_SB_DISKS; i++)
+                       if (conf->disks[i].bdev)
+                               bdput(conf->disks[i].bdev);
                kfree(conf);
+       }
        MOD_DEC_USE_COUNT;
        return 1;
 }
@@ -110,7 +116,11 @@ out:
 static int linear_stop (mddev_t *mddev)
 {
        linear_conf_t *conf = mddev_to_conf(mddev);
+       int i;
   
+       for (i = 0; i < MD_SB_DISKS; i++)
+               if (conf->disks[i].bdev)
+                       bdput(conf->disks[i].bdev);
        kfree(conf->hash_table);
        kfree(conf);
 
index 80bf2476791d60e4d936db26bb73e5654546f87c..56e7c06e108651a279e16204eaf02163f63b9580 100644 (file)
@@ -5,6 +5,7 @@
 
 struct dev_info {
        kdev_t          dev;
+       struct block_device *bdev;
        unsigned long   size;
        unsigned long   offset;
 };