1. 01 11月, 2011 13 次提交
    • J
      dm log userspace: add log device dependency · 5a25f0eb
      Jonathan E Brassow 提交于
      Allow userspace dm log implementations to register their log device so it
      is no longer missing from the list of device dependencies.
      
      When device mapper targets use a device they normally call dm_get_device
      which includes it in the device list returned to userspace applications
      such as LVM through the DM_TABLE_DEPS ioctl.  Userspace log devices
      don't use dm_get_device as userspace opens them so they are missing from
      the list of dependencies.
      
      This patch extends the DM_ULOG_CTR operation to allow userspace to
      respond with the name of the log device (if appropriate) to be
      registered via 'dm_get_device'.  DM_ULOG_REQUEST_VERSION is incremented.
      
      This is backwards compatible.  If the kernel and userspace log server
      have both been updated, the new information will be passed down to the
      kernel and the device will be registered.  If the kernel is new, but
      the log server is old, the log server will not pass down any device
      information and the kernel will simply bypass the device registration
      as before.  If the kernel is old but the log server is new, the log
      server will see the old version number and not pass the device info.
      Signed-off-by: NJonathan Brassow <jbrassow@redhat.com>
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      5a25f0eb
    • J
      dm log userspace: fix comment hyphens · b8954457
      Jonathan Brassow 提交于
      Fix comments: clustered-disk needs a hyphen not an underscore.
      Signed-off-by: NJonathan Brassow <jbrassow@redhat.com>
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      b8954457
    • J
      dm: add thin provisioning target · 991d9fa0
      Joe Thornber 提交于
      Initial EXPERIMENTAL implementation of device-mapper thin provisioning
      with snapshot support.  The 'thin' target is used to create instances of
      the virtual devices that are hosted in the 'thin-pool' target.  The
      thin-pool target provides data sharing among devices.  This sharing is
      made possible using the persistent-data library in the previous patch.
      
      The main highlight of this implementation, compared to the previous
      implementation of snapshots, is that it allows many virtual devices to
      be stored on the same data volume, simplifying administration and
      allowing sharing of data between volumes (thus reducing disk usage).
      
      Another big feature is support for arbitrary depth of recursive
      snapshots (snapshots of snapshots of snapshots ...).  The previous
      implementation of snapshots did this by chaining together lookup tables,
      and so performance was O(depth).  This new implementation uses a single
      data structure so we don't get this degradation with depth.
      
      For further information and examples of how to use this, please read
      Documentation/device-mapper/thin-provisioning.txt
      Signed-off-by: NJoe Thornber <thornber@redhat.com>
      Signed-off-by: NMike Snitzer <snitzer@redhat.com>
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      991d9fa0
    • J
      dm: add persistent data library · 3241b1d3
      Joe Thornber 提交于
      The persistent-data library offers a re-usable framework for the storage
      and management of on-disk metadata in device-mapper targets.
      
      It's used by the thin-provisioning target in the next patch and in an
      upcoming hierarchical storage target.
      
      For further information, please read
      Documentation/device-mapper/persistent-data.txt
      Signed-off-by: NJoe Thornber <thornber@redhat.com>
      Signed-off-by: NMike Snitzer <snitzer@redhat.com>
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      3241b1d3
    • M
      dm: add bufio · 95d402f0
      Mikulas Patocka 提交于
      The dm-bufio interface allows you to do cached I/O on devices,
      holding recently-read blocks in memory and performing delayed writes.
      
      We don't use buffer cache or page cache already present in the kernel, because:
      * we need to handle block sizes larger than a page
      * we can't allocate memory to perform reads or we'd have deadlocks
      
      Currently, when a cache is required, we limit its size to a fraction of
      available memory.  Usage can be viewed and changed in
      /sys/module/dm_bufio/parameters/ .
      
      The first user is thin provisioning, but more dm users are planned.
      Signed-off-by: NMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      95d402f0
    • A
      dm: export dm get md · 3cf2e4ba
      Alasdair G Kergon 提交于
      Export dm_get_md() for the new thin provisioning target to use.
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      3cf2e4ba
    • A
      dm table: add immutable feature · 36a0456f
      Alasdair G Kergon 提交于
      Introduce DM_TARGET_IMMUTABLE to indicate that the target type cannot be mixed
      with any other target type, and once loaded into a device, it cannot be
      replaced with a table containing a different type.
      
      The thin provisioning pool device will use this.
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      36a0456f
    • A
      dm table: add always writeable feature · cc6cbe14
      Alasdair G Kergon 提交于
      Add a target feature flag DM_TARGET_ALWAYS_WRITEABLE to indicate that a target
      does not support read-only mode.
      
      The initial implementation of the thin provisioning target uses this.
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      cc6cbe14
    • A
      dm table: add singleton feature · 3791e2fc
      Alasdair G Kergon 提交于
      Introduce the concept of a singleton table which contains exactly one target.
      
      If a target type sets the DM_TARGET_SINGLETON feature bit device-mapper
      will ensure that any table that includes that target contains no others.
      
      The thin provisioning pool target uses this.
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      3791e2fc
    • M
      dm kcopyd: add dm_kcopyd_zero to zero an area · 7f069653
      Mikulas Patocka 提交于
      This patch introduces dm_kcopyd_zero() to make it easy to use
      kcopyd to write zeros into the requested areas instead
      instead of copying.  It is implemented by passing a NULL
      copying source to dm_kcopyd_copy().
      
      The forthcoming thin provisioning target uses this.
      Signed-off-by: NMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      7f069653
    • N
      dm: remove superfluous smp_mb · fbdc86f3
      Namhyung Kim 提交于
      Since set_current_state() contains a memory barrier in it,
      an additional barrier isn't needed.
      Signed-off-by: NNamhyung Kim <namhyung@gmail.com>
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      fbdc86f3
    • N
      dm: use local printk ratelimit · 71a16736
      Namhyung Kim 提交于
      printk_ratelimit() shares global ratelimiting state with all
      other subsystems, so its usage is discouraged. Instead,
      define and use dm's local state.
      Signed-off-by: NNamhyung Kim <namhyung@gmail.com>
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      71a16736
    • M
      dm table: propagate non rotational flag · 4693c966
      Mandeep Singh Baines 提交于
      Allow QUEUE_FLAG_NONROT to propagate up the device stack if all
      underlying devices are non-rotational.  Tools like ureadahead will
      schedule IOs differently based on the rotational flag.
      
      With this patch, I see boot time go from 7.75 s to 7.46 s on my device.
      Suggested-by: NJ. Richard Barnette <jrbarnette@chromium.org>
      Signed-off-by: NMandeep Singh Baines <msb@chromium.org>
      Signed-off-by: NMike Snitzer <snitzer@redhat.com>
      Cc: Neil Brown <neilb@suse.de>
      Cc: Jens Axboe <jaxboe@fusionio.com>
      Cc: Martin K. Petersen <martin.petersen@oracle.com>
      Cc: dm-devel@redhat.com
      Signed-off-by: NAlasdair G Kergon <agk@redhat.com>
      4693c966
  2. 24 10月, 2011 1 次提交
  3. 20 10月, 2011 3 次提交
  4. 19 10月, 2011 11 次提交
  5. 18 10月, 2011 4 次提交
  6. 15 10月, 2011 2 次提交
  7. 14 10月, 2011 3 次提交
  8. 13 10月, 2011 1 次提交
  9. 11 10月, 2011 2 次提交
    • R
      intel-iommu: Fix AB-BA lockdep report · 3e7abe25
      Roland Dreier 提交于
      When unbinding a device so that I could pass it through to a KVM VM, I
      got the lockdep report below.  It looks like a legitimate lock
      ordering problem:
      
       - domain_context_mapping_one() takes iommu->lock and calls
         iommu_support_dev_iotlb(), which takes device_domain_lock (inside
         iommu->lock).
      
       - domain_remove_one_dev_info() starts by taking device_domain_lock
         then takes iommu->lock inside it (near the end of the function).
      
      So this is the classic AB-BA deadlock.  It looks like a safe fix is to
      simply release device_domain_lock a bit earlier, since as far as I can
      tell, it doesn't protect any of the stuff accessed at the end of
      domain_remove_one_dev_info() anyway.
      
      BTW, the use of device_domain_lock looks a bit unsafe to me... it's
      at least not obvious to me why we aren't vulnerable to the race below:
      
        iommu_support_dev_iotlb()
                                                domain_remove_dev_info()
      
        lock device_domain_lock
          find info
        unlock device_domain_lock
      
                                                lock device_domain_lock
                                                  find same info
                                                unlock device_domain_lock
      
                                                free_devinfo_mem(info)
      
        do stuff with info after it's free
      
      However I don't understand the locking here well enough to know if
      this is a real problem, let alone what the best fix is.
      
      Anyway here's the full lockdep output that prompted all of this:
      
           =======================================================
           [ INFO: possible circular locking dependency detected ]
           2.6.39.1+ #1
           -------------------------------------------------------
           bash/13954 is trying to acquire lock:
            (&(&iommu->lock)->rlock){......}, at: [<ffffffff812f6421>] domain_remove_one_dev_info+0x121/0x230
      
           but task is already holding lock:
            (device_domain_lock){-.-...}, at: [<ffffffff812f6508>] domain_remove_one_dev_info+0x208/0x230
      
           which lock already depends on the new lock.
      
           the existing dependency chain (in reverse order) is:
      
           -> #1 (device_domain_lock){-.-...}:
                  [<ffffffff8109ca9d>] lock_acquire+0x9d/0x130
                  [<ffffffff81571475>] _raw_spin_lock_irqsave+0x55/0xa0
                  [<ffffffff812f8350>] domain_context_mapping_one+0x600/0x750
                  [<ffffffff812f84df>] domain_context_mapping+0x3f/0x120
                  [<ffffffff812f9175>] iommu_prepare_identity_map+0x1c5/0x1e0
                  [<ffffffff81ccf1ca>] intel_iommu_init+0x88e/0xb5e
                  [<ffffffff81cab204>] pci_iommu_init+0x16/0x41
                  [<ffffffff81002165>] do_one_initcall+0x45/0x190
                  [<ffffffff81ca3d3f>] kernel_init+0xe3/0x168
                  [<ffffffff8157ac24>] kernel_thread_helper+0x4/0x10
      
           -> #0 (&(&iommu->lock)->rlock){......}:
                  [<ffffffff8109bf3e>] __lock_acquire+0x195e/0x1e10
                  [<ffffffff8109ca9d>] lock_acquire+0x9d/0x130
                  [<ffffffff81571475>] _raw_spin_lock_irqsave+0x55/0xa0
                  [<ffffffff812f6421>] domain_remove_one_dev_info+0x121/0x230
                  [<ffffffff812f8b42>] device_notifier+0x72/0x90
                  [<ffffffff8157555c>] notifier_call_chain+0x8c/0xc0
                  [<ffffffff81089768>] __blocking_notifier_call_chain+0x78/0xb0
                  [<ffffffff810897b6>] blocking_notifier_call_chain+0x16/0x20
                  [<ffffffff81373a5c>] __device_release_driver+0xbc/0xe0
                  [<ffffffff81373ccf>] device_release_driver+0x2f/0x50
                  [<ffffffff81372ee3>] driver_unbind+0xa3/0xc0
                  [<ffffffff813724ac>] drv_attr_store+0x2c/0x30
                  [<ffffffff811e4506>] sysfs_write_file+0xe6/0x170
                  [<ffffffff8117569e>] vfs_write+0xce/0x190
                  [<ffffffff811759e4>] sys_write+0x54/0xa0
                  [<ffffffff81579a82>] system_call_fastpath+0x16/0x1b
      
           other info that might help us debug this:
      
           6 locks held by bash/13954:
            #0:  (&buffer->mutex){+.+.+.}, at: [<ffffffff811e4464>] sysfs_write_file+0x44/0x170
            #1:  (s_active#3){++++.+}, at: [<ffffffff811e44ed>] sysfs_write_file+0xcd/0x170
            #2:  (&__lockdep_no_validate__){+.+.+.}, at: [<ffffffff81372edb>] driver_unbind+0x9b/0xc0
            #3:  (&__lockdep_no_validate__){+.+.+.}, at: [<ffffffff81373cc7>] device_release_driver+0x27/0x50
            #4:  (&(&priv->bus_notifier)->rwsem){.+.+.+}, at: [<ffffffff8108974f>] __blocking_notifier_call_chain+0x5f/0xb0
            #5:  (device_domain_lock){-.-...}, at: [<ffffffff812f6508>] domain_remove_one_dev_info+0x208/0x230
      
           stack backtrace:
           Pid: 13954, comm: bash Not tainted 2.6.39.1+ #1
           Call Trace:
            [<ffffffff810993a7>] print_circular_bug+0xf7/0x100
            [<ffffffff8109bf3e>] __lock_acquire+0x195e/0x1e10
            [<ffffffff810972bd>] ? trace_hardirqs_off+0xd/0x10
            [<ffffffff8109d57d>] ? trace_hardirqs_on_caller+0x13d/0x180
            [<ffffffff8109ca9d>] lock_acquire+0x9d/0x130
            [<ffffffff812f6421>] ? domain_remove_one_dev_info+0x121/0x230
            [<ffffffff81571475>] _raw_spin_lock_irqsave+0x55/0xa0
            [<ffffffff812f6421>] ? domain_remove_one_dev_info+0x121/0x230
            [<ffffffff810972bd>] ? trace_hardirqs_off+0xd/0x10
            [<ffffffff812f6421>] domain_remove_one_dev_info+0x121/0x230
            [<ffffffff812f8b42>] device_notifier+0x72/0x90
            [<ffffffff8157555c>] notifier_call_chain+0x8c/0xc0
            [<ffffffff81089768>] __blocking_notifier_call_chain+0x78/0xb0
            [<ffffffff810897b6>] blocking_notifier_call_chain+0x16/0x20
            [<ffffffff81373a5c>] __device_release_driver+0xbc/0xe0
            [<ffffffff81373ccf>] device_release_driver+0x2f/0x50
            [<ffffffff81372ee3>] driver_unbind+0xa3/0xc0
            [<ffffffff813724ac>] drv_attr_store+0x2c/0x30
            [<ffffffff811e4506>] sysfs_write_file+0xe6/0x170
            [<ffffffff8117569e>] vfs_write+0xce/0x190
            [<ffffffff811759e4>] sys_write+0x54/0xa0
            [<ffffffff81579a82>] system_call_fastpath+0x16/0x1b
      Signed-off-by: NRoland Dreier <roland@purestorage.com>
      Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
      3e7abe25
    • W
      mscan: too much data copied to CAN frame due to 16 bit accesses · a3a4bfde
      Wolfgang Grandegger 提交于
      Due to the 16 bit access to mscan registers there's too much data copied to
      the zero initialized CAN frame when having an odd number of bytes to copy.
      This patch ensures that only the requested bytes are copied by using an
      8 bit access for the remaining byte.
      Reported-by: NAndre Naujoks <nautsch@gmail.com>
      Signed-off-by: NOliver Hartkopp <socketcan@hartkopp.net>
      Signed-off-by: NWolfgang Grandegger <wg@grandegger.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a3a4bfde