]> err.no Git - linux-2.6/blobdiff - drivers/md/dm-table.c
dm table: remove merge_bvec sector restriction
[linux-2.6] / drivers / md / dm-table.c
index 51be53344214906593ec54dec6b6e8e1c018f369..798e468103b879f7986842028709be8852aa3dca 100644 (file)
@@ -506,14 +506,13 @@ void dm_set_device_limits(struct dm_target *ti, struct block_device *bdev)
        rs->max_sectors =
                min_not_zero(rs->max_sectors, q->max_sectors);
 
-       /* FIXME: Device-Mapper on top of RAID-0 breaks because DM
-        *        currently doesn't honor MD's merge_bvec_fn routine.
-        *        In this case, we'll force DM to use PAGE_SIZE or
-        *        smaller I/O, just to be safe. A better fix is in the
-        *        works, but add this for the time being so it will at
-        *        least operate correctly.
+       /*
+        * Check if merge fn is supported.
+        * If not we'll force DM to use PAGE_SIZE or
+        * smaller I/O, just to be safe.
         */
-       if (q->merge_bvec_fn)
+
+       if (q->merge_bvec_fn && !ti->type->merge)
                rs->max_sectors =
                        min_not_zero(rs->max_sectors,
                                     (unsigned int) (PAGE_SIZE >> 9));
@@ -873,10 +872,11 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q)
        q->max_hw_sectors = t->limits.max_hw_sectors;
        q->seg_boundary_mask = t->limits.seg_boundary_mask;
        q->bounce_pfn = t->limits.bounce_pfn;
+
        if (t->limits.no_cluster)
-               q->queue_flags &= ~(1 << QUEUE_FLAG_CLUSTER);
+               queue_flag_clear_unlocked(QUEUE_FLAG_CLUSTER, q);
        else
-               q->queue_flags |= (1 << QUEUE_FLAG_CLUSTER);
+               queue_flag_set_unlocked(QUEUE_FLAG_CLUSTER, q);
 
 }