const: make block_device_operations const
[cascardo/linux.git] / drivers / md / faulty.c
index 8695809..87d88db 100644 (file)
@@ -255,14 +255,14 @@ static void status(struct seq_file *seq, mddev_t *mddev)
 }
 
 
-static int reconfig(mddev_t *mddev, int layout, int chunk_size)
+static int reshape(mddev_t *mddev)
 {
-       int mode = layout & ModeMask;
-       int count = layout >> ModeShift;
+       int mode = mddev->new_layout & ModeMask;
+       int count = mddev->new_layout >> ModeShift;
        conf_t *conf = mddev->private;
 
-       if (chunk_size != -1)
-               return -EINVAL;
+       if (mddev->new_layout < 0)
+               return 0;
 
        /* new layout */
        if (mode == ClearFaults)
@@ -279,6 +279,7 @@ static int reconfig(mddev_t *mddev, int layout, int chunk_size)
                atomic_set(&conf->counters[mode], count);
        } else
                return -EINVAL;
+       mddev->new_layout = -1;
        mddev->layout = -1; /* makes sure further changes come through */
        return 0;
 }
@@ -298,8 +299,12 @@ static int run(mddev_t *mddev)
 {
        mdk_rdev_t *rdev;
        int i;
+       conf_t *conf;
+
+       if (md_check_no_bitmap(mddev))
+               return -EINVAL;
 
-       conf_t *conf = kmalloc(sizeof(*conf), GFP_KERNEL);
+       conf = kmalloc(sizeof(*conf), GFP_KERNEL);
        if (!conf)
                return -ENOMEM;
 
@@ -315,7 +320,7 @@ static int run(mddev_t *mddev)
        md_set_array_sectors(mddev, faulty_size(mddev, 0, 0));
        mddev->private = conf;
 
-       reconfig(mddev, mddev->layout, -1);
+       reshape(mddev);
 
        return 0;
 }
@@ -338,7 +343,7 @@ static struct mdk_personality faulty_personality =
        .run            = run,
        .stop           = stop,
        .status         = status,
-       .reconfig       = reconfig,
+       .check_reshape  = reshape,
        .size           = faulty_size,
 };