@@ -1926,12 +1926,11 @@ static int raid1_add_disk(struct mddev *mddev, struct md_rdev *rdev)
1926
1926
for (mirror = first ; mirror <= last ; mirror ++ ) {
1927
1927
p = conf -> mirrors + mirror ;
1928
1928
if (!p -> rdev ) {
1929
- if (! mddev_is_dm ( mddev ))
1930
- disk_stack_limits ( mddev -> gendisk , rdev -> bdev ,
1931
- rdev -> data_offset << 9 ) ;
1929
+ err = mddev_stack_new_rdev ( mddev , rdev );
1930
+ if ( err )
1931
+ return err ;
1932
1932
1933
1933
raid1_add_conf (conf , rdev , mirror , false);
1934
- err = 0 ;
1935
1934
/* As all devices are equivalent, we don't need a full recovery
1936
1935
* if this was recently any drive of the array
1937
1936
*/
@@ -3195,12 +3194,21 @@ static struct r1conf *setup_conf(struct mddev *mddev)
3195
3194
return ERR_PTR (err );
3196
3195
}
3197
3196
3197
+ static int raid1_set_limits (struct mddev * mddev )
3198
+ {
3199
+ struct queue_limits lim ;
3200
+
3201
+ blk_set_stacking_limits (& lim );
3202
+ lim .max_write_zeroes_sectors = 0 ;
3203
+ mddev_stack_rdev_limits (mddev , & lim );
3204
+ return queue_limits_set (mddev -> queue , & lim );
3205
+ }
3206
+
3198
3207
static void raid1_free (struct mddev * mddev , void * priv );
3199
3208
static int raid1_run (struct mddev * mddev )
3200
3209
{
3201
3210
struct r1conf * conf ;
3202
3211
int i ;
3203
- struct md_rdev * rdev ;
3204
3212
int ret ;
3205
3213
3206
3214
if (mddev -> level != 1 ) {
@@ -3228,10 +3236,9 @@ static int raid1_run(struct mddev *mddev)
3228
3236
return PTR_ERR (conf );
3229
3237
3230
3238
if (!mddev_is_dm (mddev )) {
3231
- blk_queue_max_write_zeroes_sectors (mddev -> queue , 0 );
3232
- rdev_for_each (rdev , mddev )
3233
- disk_stack_limits (mddev -> gendisk , rdev -> bdev ,
3234
- rdev -> data_offset << 9 );
3239
+ ret = raid1_set_limits (mddev );
3240
+ if (ret )
3241
+ goto abort ;
3235
3242
}
3236
3243
3237
3244
mddev -> degraded = 0 ;
0 commit comments