md: 'array_size' sysfs attribute
authorDan Williams <dan.j.williams@intel.com>
Tue, 31 Mar 2009 04:00:31 +0000 (15:00 +1100)
committerDan Williams <dan.j.williams@intel.com>
Tue, 31 Mar 2009 04:00:31 +0000 (15:00 +1100)
commitb522adcde9c4d3fb7b579cfa9160d8bde7744be8
tree4208e3dcec3ebdfa6ad9bc153f76129400532717
parent1f403624bde3c678a166984b1e6a727a0ce06f2b
md: 'array_size' sysfs attribute

Allow userspace to set the size of the array according to the following
semantics:

1/ size must be <= to the size returned by mddev->pers->size(mddev, 0, 0)
   a) If size is set before the array is running, do_md_run will fail
      if size is greater than the default size
   b) A reshape attempt that reduces the default size to less than the set
      array size should be blocked
2/ once userspace sets the size the kernel will not change it
3/ writing 'default' to this attribute returns control of the size to the
   kernel and reverts to the size reported by the personality

Also, convert locations that need to know the default size from directly
reading ->array_sectors to <pers>_size.  Resync/reshape operations
always follow the default size.

Finally, fixup other locations that read a number of 1k-blocks from
userspace to use strict_blocks_to_sectors() which checks for unsigned
long long to sector_t overflow and blocks to sectors overflow.

Reviewed-by: Andre Noll <maan@systemlinux.org>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/md/md.c
drivers/md/md.h
drivers/md/raid0.c
drivers/md/raid1.c
drivers/md/raid10.c
drivers/md/raid5.c