1. 22 10月, 2010 1 次提交
    • V
      cfq-iosched: Fix a gcc 4.5 warning and put some comments · b4627321
      Vivek Goyal 提交于
      - Andi encountedred following warning with gcc 4.5
      
        linux/block/cfq-iosched.c: In function ‘cfq_dispatch_requests’:
        linux/block/cfq-iosched.c:2156:3: warning: array subscript is above array
        bounds
      
      - Warning happens due to following code.
      
        slice = group_slice * count /
      		max_t(unsigned, cfqg->busy_queues_avg[cfqd->serving_prio],
      		cfq_group_busy_queues_wl(cfqd->serving_prio, cfqd, cfqg));
      
        gcc is complaining about cfqg->busy_queues_avg[] being indexed by CFQ
        prio classes (RT, BE and IDLE) while the array size is only 2.
      
      - At run time, we never access cfqg->busy_queues_avg[IDLE] and return from
        function before this code hits.
      
      - To fix warning increase the array size though it will remain unused. This
        patch also puts some comments to clarify some of the confusions.
      
      - I have taken Jens's patch and modified it a bit.
      
      - Compile tested with gcc 4.4 and boot tested. I don't have gcc 4.5
        running, Andi can you please test it with gcc 4.5 to make sure it
        worked.
      Reported-by: NAndi Kleen <ak@linux.intel.com>
      Signed-off-by: NVivek Goyal <vgoyal@redhat.com>
      Acked-by: NJeff Moyer <jmoyer@redhat.com>
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      b4627321
  2. 21 10月, 2010 1 次提交
  3. 19 10月, 2010 1 次提交
    • Y
      block: fix accounting bug on cross partition merges · 7681bfee
      Yasuaki Ishimatsu 提交于
      /proc/diskstats would display a strange output as follows.
      
      $ cat /proc/diskstats |grep sda
         8       0 sda 90524 7579 102154 20464 0 0 0 0 0 14096 20089
         8       1 sda1 19085 1352 21841 4209 0 0 0 0 4294967064 15689 4293424691
                                                      ~~~~~~~~~~
         8       2 sda2 71252 3624 74891 15950 0 0 0 0 232 23995 1562390
         8       3 sda3 54 487 2188 92 0 0 0 0 0 88 92
         8       4 sda4 4 0 8 0 0 0 0 0 0 0 0
         8       5 sda5 81 2027 2130 138 0 0 0 0 0 87 137
      
      Its reason is the wrong way of accounting hd_struct->in_flight. When a bio is
      merged into a request belongs to different partition by ELEVATOR_FRONT_MERGE.
      
      The detailed root cause is as follows.
      
      Assuming that there are two partition, sda1 and sda2.
      
      1. A request for sda2 is in request_queue. Hence sda1's hd_struct->in_flight
         is 0 and sda2's one is 1.
      
              | hd_struct->in_flight
         ---------------------------
         sda1 |          0
         sda2 |          1
         ---------------------------
      
      2. A bio belongs to sda1 is issued and is merged into the request mentioned on
         step1 by ELEVATOR_BACK_MERGE. The first sector of the request is changed
         from sda2 region to sda1 region. However the two partition's
         hd_struct->in_flight are not changed.
      
              | hd_struct->in_flight
         ---------------------------
         sda1 |          0
         sda2 |          1
         ---------------------------
      
      3. The request is finished and blk_account_io_done() is called. In this case,
         sda2's hd_struct->in_flight, not a sda1's one, is decremented.
      
              | hd_struct->in_flight
         ---------------------------
         sda1 |         -1
         sda2 |          1
         ---------------------------
      
      The patch fixes the problem by caching the partition lookup
      inside the request structure, hence making sure that the increment
      and decrement will always happen on the same partition struct. This
      also speeds up IO with accounting enabled, since it cuts down on
      the number of lookups we have to do.
      
      When reloading partition tables, quiesce IO to ensure that no
      request references to the partition struct exists. When it is safe
      to free the partition table, the IO for that device is restarted
      again.
      Signed-off-by: NYasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
      Cc: stable@kernel.org
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      7681bfee
  4. 15 10月, 2010 2 次提交
  5. 14 10月, 2010 1 次提交
  6. 02 10月, 2010 3 次提交
  7. 01 10月, 2010 7 次提交
  8. 25 9月, 2010 2 次提交
  9. 24 9月, 2010 1 次提交
    • M
      block: Prevent hang_check firing during long I/O · 4b197769
      Mark Lord 提交于
      During long I/O operations, the hang_check timer may fire,
      trigger stack dumps that unnecessarily alarm the user.
      
      Eg.  hdparm --security-erase NULL /dev/sdb  ## can take *hours* to complete
      
      So, if hang_check is armed, we should wake up periodically
      to prevent it from triggering.  This patch uses a wake-up interval
      equal to half the hang_check timer period, which keeps overhead low enough.
      Signed-off-by: NMark Lord <mlord@pobox.com>
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      4b197769
  10. 20 9月, 2010 1 次提交
    • C
      cfq: improve fsync performance for small files · 749ef9f8
      Corrado Zoccolo 提交于
      Fsync performance for small files achieved by cfq on high-end disks is
      lower than what deadline can achieve, due to idling introduced between
      the sync write happening in process context and the journal commit.
      
      Moreover, when competing with a sequential reader, a process writing
      small files and fsync-ing them is starved.
      
      This patch fixes the two problems by:
      - marking journal commits as WRITE_SYNC, so that they get the REQ_NOIDLE
        flag set,
      - force all queues that have REQ_NOIDLE requests to be put in the noidle
        tree.
      
      Having the queue associated to the fsync-ing process and the one associated
       to journal commits in the noidle tree allows:
      - switching between them without idling,
      - fairness vs. competing idling queues, since they will be serviced only
        after the noidle tree expires its slice.
      Acked-by: NVivek Goyal <vgoyal@redhat.com>
      Reviewed-by: NJeff Moyer <jmoyer@redhat.com>
      Tested-by: NJeff Moyer <jmoyer@redhat.com>
      Signed-off-by: NCorrado Zoccolo <czoccolo@gmail.com>
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      749ef9f8
  11. 17 9月, 2010 2 次提交
  12. 16 9月, 2010 9 次提交
  13. 15 9月, 2010 4 次提交
    • W
      init: add support for root devices specified by partition UUID · b5af921e
      Will Drewry 提交于
      This is the third patch in a series which adds support for
      storing partition metadata, optionally, off of the hd_struct.
      
      One major use for that data is being able to resolve partition
      by other identities than just the index on a block device.  Device
      enumeration varies by platform and there's a benefit to being able
      to use something like EFI GPT's GUIDs to determine the correct
      block device and partition to mount as the root.
      
      This change adds that support to root= by adding support for
      the following syntax:
      
        root=PARTUUID=hex-uuid
      Signed-off-by: NWill Drewry <wad@chromium.org>
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      b5af921e
    • W
      genhd, efi: add efi partition metadata to hd_structs · eec7ecfe
      Will Drewry 提交于
      This change extends the partition_meta_info structure to
      support EFI GPT-specific metadata and ensures that data
      is copied in on partition scanning.
      Signed-off-by: NWill Drewry <wad@chromium.org>
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      eec7ecfe
    • W
      block, partition: add partition_meta_info to hd_struct · 6d1d8050
      Will Drewry 提交于
      I'm reposting this patch series as v4 since there have been no additional
      comments, and I cleaned up one extra bit of unneeded code (in 3/3). The patches
      are against Linus's tree: 2bfc96a1
      (2.6.36-rc3).
      
      Would this patchset be suitable for inclusion in an mm branch?
      
      This changes adds a partition_meta_info struct which itself contains a
      union of structures that provide partition table specific metadata.
      
      This change leaves the union empty. The subsequent patch includes an
      implementation for CONFIG_EFI_PARTITION-based metadata.
      Signed-off-by: NWill Drewry <wad@chromium.org>
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      6d1d8050
    • N
      block: fix an address space warning in blk-map.c · 14417799
      Namhyung Kim 提交于
      Change type of 2nd parameter of blk_rq_aligned() into unsigned long
      and remove unnecessary casting. Now we can call it with 'uaddr'
      instead of 'ubuf' in __blk_rq_map_user() so that it can remove
      following warnings from sparse:
      
       block/blk-map.c:57:31: warning: incorrect type in argument 2 (different address spaces)
       block/blk-map.c:57:31:    expected void *addr
       block/blk-map.c:57:31:    got void [noderef] <asn:1>*ubuf
      
      However blk_rq_map_kern() needs one more local variable to handle it.
      Signed-off-by: NNamhyung Kim <namhyung@gmail.com>
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      14417799
  14. 14 9月, 2010 1 次提交
  15. 11 9月, 2010 3 次提交
  16. 23 8月, 2010 1 次提交