Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 38108
b: refs/heads/master
c: 3cb4021
h: refs/heads/master
v: v3
  • Loading branch information
Bryn Reeves authored and Linus Torvalds committed Oct 3, 2006
1 parent 2ba74db commit 2310c64
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9faf400f7e51e56ec76b2fc481c3191c01cb3a57
refs/heads/master: 3cb4021453a69585e458ec2177677c0c1300dccf
87 changes: 46 additions & 41 deletions trunk/drivers/md/dm-table.c
Original file line number Diff line number Diff line change
Expand Up @@ -522,56 +522,61 @@ static int __table_get_device(struct dm_table *t, struct dm_target *ti,
return 0;
}


int dm_get_device(struct dm_target *ti, const char *path, sector_t start,
sector_t len, int mode, struct dm_dev **result)
void dm_set_device_limits(struct dm_target *ti, struct block_device *bdev)
{
int r = __table_get_device(ti->table, ti, path,
start, len, mode, result);
if (!r) {
request_queue_t *q = bdev_get_queue((*result)->bdev);
struct io_restrictions *rs = &ti->limits;

/*
* Combine the device limits low.
*
* FIXME: if we move an io_restriction struct
* into q this would just be a call to
* combine_restrictions_low()
*/
request_queue_t *q = bdev_get_queue(bdev);
struct io_restrictions *rs = &ti->limits;

/*
* Combine the device limits low.
*
* FIXME: if we move an io_restriction struct
* into q this would just be a call to
* combine_restrictions_low()
*/
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.
*/
if (q->merge_bvec_fn)
rs->max_sectors =
min_not_zero(rs->max_sectors, q->max_sectors);
min_not_zero(rs->max_sectors,
(unsigned int) (PAGE_SIZE >> 9));

/* 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.
*/
if (q->merge_bvec_fn)
rs->max_sectors =
min_not_zero(rs->max_sectors,
(unsigned int) (PAGE_SIZE >> 9));
rs->max_phys_segments =
min_not_zero(rs->max_phys_segments,
q->max_phys_segments);

rs->max_phys_segments =
min_not_zero(rs->max_phys_segments,
q->max_phys_segments);
rs->max_hw_segments =
min_not_zero(rs->max_hw_segments, q->max_hw_segments);

rs->max_hw_segments =
min_not_zero(rs->max_hw_segments, q->max_hw_segments);
rs->hardsect_size = max(rs->hardsect_size, q->hardsect_size);

rs->hardsect_size = max(rs->hardsect_size, q->hardsect_size);
rs->max_segment_size =
min_not_zero(rs->max_segment_size, q->max_segment_size);

rs->max_segment_size =
min_not_zero(rs->max_segment_size, q->max_segment_size);
rs->seg_boundary_mask =
min_not_zero(rs->seg_boundary_mask,
q->seg_boundary_mask);

rs->seg_boundary_mask =
min_not_zero(rs->seg_boundary_mask,
q->seg_boundary_mask);
rs->no_cluster |= !test_bit(QUEUE_FLAG_CLUSTER, &q->queue_flags);
}
EXPORT_SYMBOL_GPL(dm_set_device_limits);

rs->no_cluster |= !test_bit(QUEUE_FLAG_CLUSTER, &q->queue_flags);
}
int dm_get_device(struct dm_target *ti, const char *path, sector_t start,
sector_t len, int mode, struct dm_dev **result)
{
int r = __table_get_device(ti->table, ti, path,
start, len, mode, result);

if (!r)
dm_set_device_limits(ti, (*result)->bdev);

return r;
}
Expand Down
5 changes: 5 additions & 0 deletions trunk/include/linux/device-mapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ typedef int (*dm_ioctl_fn) (struct dm_target *ti, struct inode *inode,

void dm_error(const char *message);

/*
* Combine device limits.
*/
void dm_set_device_limits(struct dm_target *ti, struct block_device *bdev);

/*
* Constructors should call these functions to ensure destination devices
* are opened/closed correctly.
Expand Down

0 comments on commit 2310c64

Please sign in to comment.