11 Aug, 2010

1 commit


15 Jun, 2010

1 commit


22 May, 2010

4 commits

  • Currently, native capacity unlocking is initiated only when a
    recognized partition extends beyond the end of the disk. However,
    there are several other unhandled cases where truncated capacity can
    lead to misdetection of partitions.

    * Partition table is fully beyond EOD.

    * Partition table is partially beyond EOD (daisy chained ones).

    * Recognized partition starts beyond EOD.

    This patch updates generic partition check code such that all the
    above three cases are handled too. For the first two, @state tracks
    whether low level partition check code tried to read beyond EOD during
    partition scan and triggers native capacity unlocking accordingly.
    The third is now handled similarly to the original unlocking case.

    Signed-off-by: Tejun Heo
    Cc: Ben Hutchings
    Acked-by: David S. Miller
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • Make the following changes to partition check code.

    * Add ->bdev to struct parsed_partitions.

    * Introduce read_part_sector() which is a simple wrapper around
    read_dev_sector() which takes struct parsed_partitions *state
    instead of @bdev.

    * For functions which used to take @state and @bdev, drop @bdev. For
    functions which used to take @bdev, replace it with @state.

    * While updating, drop superflous checks on NULL state/bdev in ldm.c.

    This cleans up the API a bit and enables better handling of IO errors
    during partition check as the generic partition check code now has
    much better visibility into what went wrong in the low level code
    paths.

    Signed-off-by: Tejun Heo
    Cc: Ben Hutchings
    Acked-by: David S. Miller
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • bdops->set_capacity() is unnecessarily generic. All that's required
    is a simple one way notification to lower level driver telling it to
    try to unlock native capacity. There's no reason to pass in target
    capacity or return the new capacity. The former is always the
    inherent native capacity and the latter can be handled via the usual
    device resize / revalidation path. In fact, the current API is always
    used that way.

    Replace ->set_capacity() with ->unlock_native_capacity() which take
    only @disk and doesn't return anything. IDE which is the only current
    user of the API is converted accordingly.

    Signed-off-by: Tejun Heo
    Cc: Ben Hutchings
    Cc: Bartlomiej Zolnierkiewicz
    Acked-by: David S. Miller
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • Device resize via ->set_capacity() can reveal new partitions (e.g. in
    chained partition table formats such as dos extended parts). Restart
    partition scan from the beginning after resizing a device. This
    change also makes libata always revalidate the disk after resize which
    makes lower layer native capacity unlocking implementation simpler and
    more robust as resize can be handled in the usual path.

    Signed-off-by: Tejun Heo
    Reported-by: Ben Hutchings
    Acked-by: David S. Miller
    Signed-off-by: Jens Axboe

    Tejun Heo
     

30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

11 Jan, 2010

1 commit

  • All callers of the stacking functions use 512-byte sector units rather
    than byte offsets. Simplify the code so the stacking functions take
    sectors when specifying data offsets.

    Signed-off-by: Martin K. Petersen
    Signed-off-by: Jens Axboe

    Martin K. Petersen
     

10 Nov, 2009

1 commit

  • While SSDs track block usage on a per-sector basis, RAID arrays often
    have allocation blocks that are bigger. Allow the discard granularity
    and alignment to be set and teach the topology stacking logic how to
    handle them.

    Signed-off-by: Martin K. Petersen
    Signed-off-by: Jens Axboe

    Martin K. Petersen
     

07 Oct, 2009

1 commit

  • Commit a9327cac440be4d8333bba975cbbf76045096275 added seperate read
    and write statistics of in_flight requests. And exported the number
    of read and write requests in progress seperately through sysfs.

    But Corrado Zoccolo reported getting strange
    output from "iostat -kx 2". Global values for service time and
    utilization were garbage. For interval values, utilization was always
    100%, and service time is higher than normal.

    So this was reverted by commit 0f78ab9899e9d6acb09d5465def618704255963b

    The problem was in part_round_stats_single(), I missed the following:
    if (now == part->stamp)
    return;

    - if (part->in_flight) {
    + if (part_in_flight(part)) {
    __part_stat_add(cpu, part, time_in_queue,
    part_in_flight(part) * (now - part->stamp));
    __part_stat_add(cpu, part, io_ticks, (now - part->stamp));

    With this chunk included, the reported regression gets fixed.

    Signed-off-by: Nikanth Karthikesan

    --
    Signed-off-by: Jens Axboe

    Nikanth Karthikesan
     

05 Oct, 2009

1 commit

  • This reverts commit a9327cac440be4d8333bba975cbbf76045096275.

    Corrado Zoccolo reports:

    "with 2.6.32-rc1 I started getting the following strange output from
    "iostat -kx 2":
    Linux 2.6.31bisect (et2) 04/10/2009 _i686_ (2 CPU)

    avg-cpu: %user %nice %system %iowait %steal %idle
    10,70 0,00 3,16 15,75 0,00 70,38

    Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s
    avgrq-sz avgqu-sz await svctm %util
    sda 18,22 0,00 0,67 0,01 14,77 0,02
    43,94 0,01 10,53 39043915,03 2629219,87
    sdb 60,89 9,68 50,79 3,04 1724,43 50,52
    65,95 0,70 13,06 488437,47 2629219,87

    avg-cpu: %user %nice %system %iowait %steal %idle
    2,72 0,00 0,74 0,00 0,00 96,53

    Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s
    avgrq-sz avgqu-sz await svctm %util
    sda 0,00 0,00 0,00 0,00 0,00 0,00
    0,00 0,00 0,00 0,00 100,00
    sdb 0,00 0,00 0,00 0,00 0,00 0,00
    0,00 0,00 0,00 0,00 100,00

    avg-cpu: %user %nice %system %iowait %steal %idle
    6,68 0,00 0,99 0,00 0,00 92,33

    Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s
    avgrq-sz avgqu-sz await svctm %util
    sda 0,00 0,00 0,00 0,00 0,00 0,00
    0,00 0,00 0,00 0,00 100,00
    sdb 0,00 0,00 0,00 0,00 0,00 0,00
    0,00 0,00 0,00 0,00 100,00

    avg-cpu: %user %nice %system %iowait %steal %idle
    4,40 0,00 0,73 1,47 0,00 93,40

    Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s
    avgrq-sz avgqu-sz await svctm %util
    sda 0,00 0,00 0,00 0,00 0,00 0,00
    0,00 0,00 0,00 0,00 100,00
    sdb 0,00 4,00 0,00 3,00 0,00 28,00
    18,67 0,06 19,50 333,33 100,00

    Global values for service time and utilization are garbage. For
    interval values, utilization is always 100%, and service time is
    higher than normal.

    I bisected it down to:
    [a9327cac440be4d8333bba975cbbf76045096275] Seperate read and write
    statistics of in_flight requests
    and verified that reverting just that commit indeed solves the issue
    on 2.6.32-rc1."

    So until this is debugged, revert the bad commit.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

22 Sep, 2009

1 commit


16 Sep, 2009

1 commit


14 Sep, 2009

1 commit

  • Currently, there is a single in_flight counter measuring the number of
    requests in the request_queue. But some monitoring tools would like to
    know how many read requests and write requests are in progress. Split the
    current in_flight counter into two seperate counters for read and write.

    This information is exported as a sysfs attribute, as changing the
    currently available stat files would break the existing tools.

    Signed-off-by: Nikanth Karthikesan
    Signed-off-by: Jens Axboe

    Nikanth Karthikesan
     

13 Jul, 2009

1 commit

  • git commit f67f129e "Driver core: implement uevent suppress in kobject"
    contains this chunk for fs/partitions/check.c:

    /* suppress uevent if the disk supresses it */
    - if (!ddev->uevent_suppress)
    + if (!dev_get_uevent_suppress(pdev))
    kobject_uevent(&pdev->kobj, KOBJ_ADD);

    However that should have been

    - if (!ddev->uevent_suppress)
    + if (!dev_get_uevent_suppress(ddev))

    Signed-off-by: Heiko Carstens
    Acked-by: Ming Lei
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Heiko Carstens
     

13 Jun, 2009

1 commit

  • * 'for-2.6.31' of git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6: (29 commits)
    ide: re-implement ide_pci_init_one() on top of ide_pci_init_two()
    ide: unexport ide_find_dma_mode()
    ide: fix PowerMac bootup oops
    ide: skip probe if there are no devices on the port (v2)
    sl82c105: add printk() logging facility
    ide-tape: fix proc warning
    ide: add IDE_DFLAG_NIEN_QUIRK device flag
    ide: respect quirk_drives[] list on all controllers
    hpt366: enable all quirks for devices on quirk_drives[] list
    hpt366: sync quirk_drives[] list with pdc202xx_{new,old}.c
    ide: remove superfluous SELECT_MASK() call from do_rw_taskfile()
    ide: remove superfluous SELECT_MASK() call from ide_driveid_update()
    icside: remove superfluous ->maskproc method
    ide-tape: fix IDE_AFLAG_* atomic accesses
    ide-tape: change IDE_AFLAG_IGNORE_DSC non-atomically
    pdc202xx_old: kill resetproc() method
    pdc202xx_old: don't call pdc202xx_reset() on IRQ timeout
    pdc202xx_old: use ide_dma_test_irq()
    ide: preserve Host Protected Area by default (v2)
    ide-gd: implement block device ->set_capacity method (v2)
    ...

    Linus Torvalds
     

07 Jun, 2009

2 commits

  • * Add ->set_capacity block device method and use it in rescan_partitions()
    to attempt enabling native capacity of the device upon detecting the
    partition which exceeds device capacity.

    * Add GENHD_FL_NATIVE_CAPACITY flag to try limit attempts of enabling
    native capacity during partition scan.

    Together with the consecutive patch implementing ->set_capacity method in
    ide-gd device driver this allows automatic disabling of Host Protected Area
    (HPA) if any partitions overlapping HPA are detected.

    Cc: Robert Hancock
    Cc: Frans Pop
    Cc: "Andries E. Brouwer"
    Acked-by: Al Viro
    Emphatically-Acked-by: Alan Cox
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     
  • The current warning message says only about the kernel's action taken
    without mentioning the underlying reason behind it.

    Noticed-by: Robert Hancock
    Cc: Frans Pop
    Cc: "Andries E. Brouwer"
    Cc: Al Viro
    Emphatically-Acked-by: Alan Cox
    Signed-off-by: Bartlomiej Zolnierkiewicz

    Bartlomiej Zolnierkiewicz
     

23 May, 2009

1 commit

  • To support devices with physical block sizes bigger than 512 bytes we
    need to ensure proper alignment. This patch adds support for exposing
    I/O topology characteristics as devices are stacked.

    logical_block_size is the smallest unit the device can address.

    physical_block_size indicates the smallest I/O the device can write
    without incurring a read-modify-write penalty.

    The io_min parameter is the smallest preferred I/O size reported by
    the device. In many cases this is the same as the physical block
    size. However, the io_min parameter can be scaled up when stacking
    (RAID5 chunk size > physical block size).

    The io_opt characteristic indicates the optimal I/O size reported by
    the device. This is usually the stripe width for arrays.

    The alignment_offset parameter indicates the number of bytes the start
    of the device/partition is offset from the device's natural alignment.
    Partition tools and MD/DM utilities can use this to pad their offsets
    so filesystems start on proper boundaries.

    Signed-off-by: Martin K. Petersen
    Signed-off-by: Jens Axboe

    Martin K. Petersen
     

02 Apr, 2009

1 commit


25 Mar, 2009

1 commit

  • This patch implements uevent suppress in kobject and removes it
    from struct device, based on the following ideas:

    1,Uevent sending should be one attribute of kobject, so suppressing it
    in kobject layer is more natural than in device layer. By this way,
    we can do it for other objects embedded with kobject.

    2,It may save several bytes for each instance of struct device.(On my
    omap3(32bit ARM) based box, can save 8bytes per device object)

    This patch also introduces dev_set|get_uevent_suppress() helpers to
    set and query uevent_suppress attribute in case to help kobject
    as private part of struct device in future.

    [This version is against the latest driver-core patch set of Greg,please
    ignore the last version.]

    Signed-off-by: Ming Lei
    Signed-off-by: Greg Kroah-Hartman

    Ming Lei
     

27 Jan, 2009

1 commit


26 Jan, 2009

1 commit

  • Impact: New way of using the blktrace infrastructure

    This drops the requirement of userspace utilities to use the blktrace
    facility.

    Configuration is done thru sysfs, adding a "trace" directory to the
    partition directory where blktrace can be enabled for the associated
    request_queue.

    The same filters present in the IOCTL interface are present as sysfs
    device attributes.

    The /sys/block/sdX/sdXN/trace/enable file allows tracing without any
    filters.

    The other files in this directory: pid, act_mask, start_lba and end_lba
    can be used with the same meaning as with the IOCTL interface.

    Using the sysfs interface will only setup the request_queue->blk_trace
    fields, tracing will only take place when the "blk" tracer is selected
    via the ftrace interface, as in the following example:

    To see the trace, one can use the /d/tracing/trace file or the
    /d/tracign/trace_pipe file, with semantics defined in the ftrace
    documentation in Documentation/ftrace.txt.

    [root@f10-1 ~]# cat /t/trace
    kjournald-305 [000] 3046.491224: 8,1 A WBS 6367 + 8 -0 [000] 3046.511914: 8,1 C RS 6367 + 8 [6367]
    [root@f10-1 ~]#

    The default line context (prefix) format is the one described in the ftrace
    documentation, with the blktrace specific bits using its existing format,
    described in blkparse(8).

    If one wants to have the classic blktrace formatting, this is possible by
    using:

    [root@f10-1 ~]# echo blk_classic > /t/trace_options
    [root@f10-1 ~]# cat /t/trace
    8,1 0 3046.491224 305 A WBS 6367 + 8 /t/trace_options
    [root@f10-1 ~]# echo stacktrace > /t/trace_options

    [root@f10-1 ~]# cat /t/trace
    kjournald-305 [000] 3318.826779: 8,1 A WBS 6375 + 8
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     

10 Jan, 2009

1 commit

  • Neil writes:

    Hi Jens,

    I've found a little bug for you. It was introduced by
    a6f23657d3072bde6844055bbc2290e497f33fbc

    block: add one-hit cache for disk partition lookup

    and has the effect of killing my machine whenever I try to assemble
    an md array :-(
    One of the devices in the array has partitions, and mdadm always
    deletes partitions before putting a whole-device in an array (as it
    can cause confusion). The next IO to that device locks the machine.
    I don't really understand exactly why it locks up, but it happens in
    disk_map_sector_rcu(). This patch fixes it.

    Which is due to a missing clear of the (now) stale partition lookup
    data. So clear that when we delete a partition.

    Signed-off-by: Jens Axboe

    Neil Brown
     

07 Jan, 2009

1 commit


18 Nov, 2008

3 commits


21 Oct, 2008

2 commits


17 Oct, 2008

2 commits

  • With extended devt, finding out the partition number becomes a bit
    more challenging as subtracting the minor number from that of the
    parent device doesn't work anymore. The only thing left is parsing
    the partition name which is brittle and not exactly universal (some
    have '-' between the device name and partition number while others
    don't). This patch introduced partition attribute which contains the
    partition number of the device. This should make finding partitions
    and its index easier.

    This problem and solution were suggested by H. Peter Anvin.

    Signed-off-by: Tejun Heo
    Cc: H. Peter Anvin
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • We currently follow blindly what the partition table lies about the
    disk, and let the kernel create block devices which can not be accessed.
    Trying to identify the device leads to kernel logs full of:
    sdb: rw=0, want=73392, limit=28800
    attempt to access beyond end of device

    Here is an example of a broken partition table, where sda2 starts
    behind the end of the disk, and sdb3 is larger than the entire disk:
    Disk /dev/sdb: 14 MB, 14745600 bytes
    1 heads, 29 sectors/track, 993 cylinders, total 28800 sectors
    Device Boot Start End Blocks Id System
    /dev/sdb1 29 7800 3886 83 Linux
    /dev/sdb2 37801 45601 3900+ 83 Linux
    /dev/sdb3 15602 73402 28900+ 83 Linux
    /dev/sdb4 23403 28796 2697 83 Linux

    The kernel creates these completely invalid devices, which can not be
    accessed, or may lead to other unpredictable failures:
    grep . /sys/class/block/sdb*/{start,size}
    /sys/class/block/sdb/size:28800
    /sys/class/block/sdb1/start:29
    /sys/class/block/sdb1/size:7772
    /sys/class/block/sdb2/start:37801
    /sys/class/block/sdb2/size:7801
    /sys/class/block/sdb3/start:15602
    /sys/class/block/sdb3/size:57801
    /sys/class/block/sdb4/start:23403
    /sys/class/block/sdb4/size:5394

    With this patch, we ignore partitions which start behind the end of the disk,
    and limit partitions to the end of the disk if they pretend to be larger:
    grep . /sys/class/block/sdb*/{start,size}
    /sys/class/block/sdb/size:28800
    /sys/class/block/sdb1/start:29
    /sys/class/block/sdb1/size:7772
    /sys/class/block/sdb3/start:15602
    /sys/class/block/sdb3/size:13198
    /sys/class/block/sdb4/start:23403
    /sys/class/block/sdb4/size:5394

    These warnings are printed to the kernel log:
    sdb: p2 ignored, start 37801 is behind the end of the disk
    sdb: p3 size 57801 limited to end of disk

    Signed-off-by: Kay Sievers
    Cc: Herton Ronaldo Krzesinski
    Cc: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kay Sievers
     

09 Oct, 2008

8 commits

  • Check for device resize in the rescan_partitions() routine. If the device
    has been resized, the bdev size is set to match. The rescan_partitions()
    routine is called when opening the device and when calling the
    BLKRRPART ioctl.

    Signed-off-by: Andrew Patterson
    Signed-off-by: Jens Axboe

    Andrew Patterson
     
  • Now that disk and partition handlings are mostly unified, it's easy to
    allow disk to have extended device number. This patch makes
    add_disk() use extended device number if disk->minors is zero. Both
    sd and ide-disk are updated to use this.

    * sd_format_disk_name() is implemented which can generically determine
    the drive name. This removes disk number restriction stemming from
    limited device names.

    * If sd index goes over SD_MAX_DISKS (which can be increased now BTW),
    sd simply doesn't initialize minors letting block layer choose
    extended device number.

    * If CONFIG_DEBUG_EXT_DEVT is set, both sd and ide-disk always set
    minors to 0 and use extended device numbers.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • disk->__part used to be statically allocated to the maximum possible
    number of partitions. This patch makes partition array allocation
    dynamic. The added overhead is minimal as only real change is one
    memory dereference changed to RCU one. This saves both a bit of
    memory and cpu cycles iterating through unoccupied slots and makes
    increasing partition limit easier.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • Move stats related fields - stamp, in_flight, dkstats - from disk to
    part0 and unify stat handling such that...

    * part_stat_*() now updates part0 together if the specified partition
    is not part0. ie. part_stat_*() are now essentially all_stat_*().

    * {disk|all}_stat_*() are gone.

    * part_round_stats() is updated similary. It handles part0 stats
    automatically and disk_round_stats() is killed.

    * part_{inc|dec}_in_fligh() is implemented which automatically updates
    part0 stats for parts other than part0.

    * disk_map_sector_rcu() is updated to return part0 if no part matches.
    Combined with the above changes, this makes NULL special case
    handling in callers unnecessary.

    * Separate stats show code paths for disk are collapsed into part
    stats show code paths.

    * Rename disk_stat_lock/unlock() to part_stat_lock/unlock()

    While at it, reposition stat handling macros a bit and add missing
    parentheses around macro parameters.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • GENHD_FL_FAIL for disk is what make_it_fail is for parts. Kill it and
    use part0->make_it_fail. Sysfs node handling is unified too.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • Till now, bdev->bd_part is set only if the bdev was for parts other
    than part0. This patch makes bdev->bd_part always set so that code
    paths don't have to differenciate common handling.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • Move disk->holder_dir to part0->holder_dir. Kill now mostly
    superflous bdev_get_holder().

    While at it, kill superflous kobject_get/put() around holder_dir,
    slave_dir and cmd_filter creation and collapse
    disk_sysfs_add_subdirs() into register_disk(). These serve no purpose
    but obfuscating the code.

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • Move disk->policy to part0->policy. Implement and use get_disk_ro().

    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Tejun Heo