Revision tags: v5.15.41, v5.15.40, v5.15.39, v5.15.38, v5.15.37, v5.15.36, v5.15.35, v5.15.34, v5.15.33, v5.15.32, v5.15.31, v5.15.30, v5.15.29, v5.15.28, v5.15.27, v5.15.26, v5.15.25, v5.15.24, v5.15.23, v5.15.22, v5.15.21, v5.15.20, v5.15.19, v5.15.18, v5.15.17, v5.4.173, v5.15.16, v5.15.15, v5.15.10, v5.15.9, v5.15.8, v5.15.7, v5.15.6, v5.15.5, v5.15.4, v5.15.3, v5.15.2, v5.15.1, v5.15, v5.14.14, v5.14.13, v5.14.12, v5.14.11, v5.14.10, v5.14.9, v5.14.8, v5.14.7, v5.14.6, v5.10.67, v5.10.66, v5.14.5, v5.14.4, v5.10.65, v5.14.3, v5.10.64, v5.14.2, v5.10.63, v5.14.1, v5.10.62, v5.14, v5.10.61, v5.10.60, v5.10.53, v5.10.52, v5.10.51, v5.10.50, v5.10.49, v5.13, v5.10.46, v5.10.43, v5.10.42, v5.10.41 |
|
#
db2351eb |
| 26-May-2021 |
Mikulas Patocka <mpatocka@redhat.com> |
dm kcopyd: avoid useless atomic operations
The functions set_bit and clear_bit are atomic. We don't need atomicity when making flags for dm-kcopyd. So, change them to direct manipulation of the flag
dm kcopyd: avoid useless atomic operations
The functions set_bit and clear_bit are atomic. We don't need atomicity when making flags for dm-kcopyd. So, change them to direct manipulation of the flags.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
Revision tags: v5.10.40, v5.10.39, v5.4.119, v5.10.36, v5.10.35, v5.10.34, v5.4.116, v5.10.33, v5.12, v5.10.32, v5.10.31, v5.10.30, v5.10.27, v5.10.26, v5.10.25, v5.10.24, v5.10.23, v5.10.22, v5.10.21, v5.10.20, v5.10.19, v5.4.101, v5.10.18, v5.10.17, v5.11, v5.10.16, v5.10.15, v5.10.14, v5.10, v5.8.17, v5.8.16, v5.8.15, v5.9, v5.8.14, v5.8.13, v5.8.12, v5.8.11, v5.8.10, v5.8.9, v5.8.8, v5.8.7, v5.8.6, v5.4.62, v5.8.5, v5.8.4, v5.4.61, v5.8.3, v5.4.60, v5.8.2, v5.4.59, v5.8.1, v5.4.58, v5.4.57, v5.4.56, v5.8, v5.7.12, v5.4.55, v5.7.11, v5.4.54, v5.7.10, v5.4.53, v5.4.52, v5.7.9, v5.7.8, v5.4.51 |
|
#
174364f6 |
| 07-Jul-2020 |
Damien Le Moal <damien.lemoal@wdc.com> |
dm zoned: Fix zone reclaim trigger
Only triggering reclaim based on the percentage of unmapped cache zones can fail to detect cases where reclaim is needed, e.g. if the target has only 2 or 3 cache
dm zoned: Fix zone reclaim trigger
Only triggering reclaim based on the percentage of unmapped cache zones can fail to detect cases where reclaim is needed, e.g. if the target has only 2 or 3 cache zones and only one unmapped cache zone, the percentage of free cache zones is higher than DMZ_RECLAIM_LOW_UNMAP_ZONES (30%) and reclaim does not trigger.
This problem, combined with the fact that dmz_schedule_reclaim() is called from dmz_handle_bio() without the map lock held, leads to a race between zone allocation and dmz_should_reclaim() result. Depending on the workload applied, this race can lead to the write path waiting forever for a free zone without reclaim being triggered.
Fix this by moving dmz_schedule_reclaim() inside dmz_alloc_zone() under the map lock. This results in checking the need for zone reclaim whenever a new data or buffer zone needs to be allocated.
Also fix dmz_reclaim_percentage() to always return 0 if the number of unmapped cache (or random) zones is less than or equal to 1.
Suggested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
ce34c9b4 |
| 02-Jul-2020 |
Wei Yongjun <weiyongjun1@huawei.com> |
dm zoned: fix unused but set variable warnings
Fix unused but set variable warnings:
drivers/md/dm-zoned-reclaim.c:504:42: warning: variable nr_rnd set but not used [-Wunused-but-set-variable] 5
dm zoned: fix unused but set variable warnings
Fix unused but set variable warnings:
drivers/md/dm-zoned-reclaim.c:504:42: warning: variable nr_rnd set but not used [-Wunused-but-set-variable] 504 | unsigned int p_unmap, nr_unmap_rnd = 0, nr_rnd = 0; | ^~~~~~ drivers/md/dm-zoned-reclaim.c:504:24: warning: variable nr_unmap_rnd set but not used [-Wunused-but-set-variable] 504 | unsigned int p_unmap, nr_unmap_rnd = 0, nr_rnd = 0; | ^~~~~~~~~~~~
Fixes: f97809aec589 ("dm zoned: per-device reclaim") Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
Revision tags: v5.4.50, v5.7.7, v5.4.49, v5.7.6, v5.7.5, v5.4.48, v5.7.4, v5.7.3, v5.4.47, v5.4.46, v5.7.2 |
|
#
c69cb1d1 |
| 07-Jun-2020 |
Damien Le Moal <damien.lemoal@wdc.com> |
dm zoned: fix uninitialized pointer dereference
Make sure that the local variable rzone in dmz_do_reclaim() is always initialized before being used for printing debug messages.
Fixes: f97809aec589
dm zoned: fix uninitialized pointer dereference
Make sure that the local variable rzone in dmz_do_reclaim() is always initialized before being used for printing debug messages.
Fixes: f97809aec589 ("dm zoned: per-device reclaim") Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
Revision tags: v5.4.45, v5.7.1, v5.4.44 |
|
#
69875d44 |
| 02-Jun-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: select reclaim zone based on device index
per-device reclaim should select zones on that device only.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lem
dm zoned: select reclaim zone based on device index
per-device reclaim should select zones on that device only.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
22c1ef66 |
| 02-Jun-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: allocate zone by device index
When allocating a zone, pass in an indicator on which device the zone should be allocated; this increases performance for a multi-device setup because reclaim
dm zoned: allocate zone by device index
When allocating a zone, pass in an indicator on which device the zone should be allocated; this increases performance for a multi-device setup because reclaim will now allocate zones on the device for which reclaim is running.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
bd82fdab |
| 02-Jun-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: move random and sequential zones into struct dmz_dev
Random and sequential zones should be part of the respective device structure to make arbitration between devices possible.
Signed-off
dm zoned: move random and sequential zones into struct dmz_dev
Random and sequential zones should be part of the respective device structure to make arbitration between devices possible.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
f97809ae |
| 02-Jun-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: per-device reclaim
Instead of having one reclaim workqueue for the entire set we should be allocating a reclaim workqueue per device; doing so will reduce contention and should boost perfo
dm zoned: per-device reclaim
Instead of having one reclaim workqueue for the entire set we should be allocating a reclaim workqueue per device; doing so will reduce contention and should boost performance for a multi-device setup.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
8f22272a |
| 02-Jun-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: add device pointer to struct dm_zone
Add a pointer, to the containing device, within struct dm_zone and kill dmz_zone_to_dev().
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by:
dm zoned: add device pointer to struct dm_zone
Add a pointer, to the containing device, within struct dm_zone and kill dmz_zone_to_dev().
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
c3ff479d |
| 02-Jun-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: improve logging messages for reclaim
Instead of just reporting the errno, add some more verbose debugging message in the reclaim path.
Signed-off-by: Hannes Reinecke <hare@suse.de> Review
dm zoned: improve logging messages for reclaim
Instead of just reporting the errno, add some more verbose debugging message in the reclaim path.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
Revision tags: v5.7, v5.4.43, v5.4.42 |
|
#
a16b7dee |
| 19-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: terminate reclaim on congestion
When dmz_get_chunk_mapping() selects a zone which is under reclaim we should terminate the reclaim copy process. Since we're changing the zone itself, recla
dm zoned: terminate reclaim on congestion
When dmz_get_chunk_mapping() selects a zone which is under reclaim we should terminate the reclaim copy process. Since we're changing the zone itself, reclaim needs to run afterwards again anyway.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
c5c78859 |
| 19-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: start reclaim with sequential zones
Sequential zones perform better for reclaim, so start off using them and only use random zones as a fallback when cache zones are present.
Signed-off-b
dm zoned: start reclaim with sequential zones
Sequential zones perform better for reclaim, so start off using them and only use random zones as a fallback when cache zones are present.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
90a9b869 |
| 19-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: reclaim random zones when idle
When the system is idle we should be starting reclaiming random zones, too.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damie
dm zoned: reclaim random zones when idle
When the system is idle we should be starting reclaiming random zones, too.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
34f5affd |
| 19-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: separate random and cache zones
Instead of lumping emulated zones together with random zones we should be handling them as separate 'cache' zones. This improves code readability and allows
dm zoned: separate random and cache zones
Instead of lumping emulated zones together with random zones we should be handling them as separate 'cache' zones. This improves code readability and allows an easier implementation of different cache policies.
Also add additional allocation flags, to separate the type (cache, random, or sequential) from the purpose (eg reclaim).
Also switch the allocation policy to not use random zones as buffer zones if cache zones are present. This avoids a performance drop when all cache zones are used.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
489dc0f0 |
| 19-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: return NULL if dmz_get_zone_for_reclaim() fails to find a zone
The only case where dmz_get_zone_for_reclaim() cannot return a zone is if the respective lists are empty. So we should just r
dm zoned: return NULL if dmz_get_zone_for_reclaim() fails to find a zone
The only case where dmz_get_zone_for_reclaim() cannot return a zone is if the respective lists are empty. So we should just return a simple NULL value here as we really don't have an error code which would make sense.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
49de3b7d |
| 14-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: remove spurious newlines from debugging messages
DMDEBUG will already add a newline to the logging messages, so we shouldn't be adding it to the message itself.
Signed-off-by: Hannes Rein
dm zoned: remove spurious newlines from debugging messages
DMDEBUG will already add a newline to the logging messages, so we shouldn't be adding it to the message itself.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
Revision tags: v5.4.41 |
|
#
6c805f77 |
| 11-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: remove 'dev' argument from reclaim
Use the dmz_zone_to_dev() mapping function to remove the 'dev' argument from reclaim.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Bob Liu
dm zoned: remove 'dev' argument from reclaim
Use the dmz_zone_to_dev() mapping function to remove the 'dev' argument from reclaim.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Bob Liu <bob.liu@oracle.com> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
d0e21ce4 |
| 11-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: Introduce dmz_dev_is_dying() and dmz_check_dev()
Introduce accessors dmz_dev_is_dying() and dmz_check_dev() to avoid having to reference the devices directly.
Signed-off-by: Hannes Reinec
dm zoned: Introduce dmz_dev_is_dying() and dmz_check_dev()
Introduce accessors dmz_dev_is_dying() and dmz_check_dev() to avoid having to reference the devices directly.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Bob Liu <bob.liu@oracle.com> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
2234e732 |
| 11-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: introduce dmz_metadata_label() to format device name
Introduce dmz_metadata_label() to format the device-mapper device name and use it instead of the device name of the underlying device.
dm zoned: introduce dmz_metadata_label() to format device name
Introduce dmz_metadata_label() to format the device-mapper device name and use it instead of the device name of the underlying device.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Reviewed-by: Bob Liu <bob.liu@oracle.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
36820560 |
| 11-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: move fields from struct dmz_dev to dmz_metadata
Move fields from the device structure into the metadata structure and provide accessor functions.
Signed-off-by: Hannes Reinecke <hare@suse
dm zoned: move fields from struct dmz_dev to dmz_metadata
Move fields from the device structure into the metadata structure and provide accessor functions.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Reviewed-by: Bob Liu <bob.liu@oracle.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
#
b7122873 |
| 11-May-2020 |
Hannes Reinecke <hare@suse.de> |
dm zoned: store zone id within the zone structure and kill dmz_id()
Instead of calculating the zone index by the offset within the zone array store the index within the structure itself. With that t
dm zoned: store zone id within the zone structure and kill dmz_id()
Instead of calculating the zone index by the offset within the zone array store the index within the structure itself. With that the helper dmz_id() is pointless and can be replaced with accessing the ->id value directly.
Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Bob Liu <bob.liu@oracle.com> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
Revision tags: v5.4.40, v5.4.39, v5.4.38, v5.4.37, v5.4.36, v5.4.35, v5.4.34, v5.4.33, v5.4.32, v5.4.31, v5.4.30, v5.4.29, v5.6, v5.4.28, v5.4.27, v5.4.26, v5.4.25, v5.4.24, v5.4.23, v5.4.22, v5.4.21, v5.4.20, v5.4.19, v5.4.18, v5.4.17, v5.4.16, v5.5, v5.4.15, v5.4.14, v5.4.13, v5.4.12, v5.4.11, v5.4.10, v5.4.9, v5.4.8, v5.4.7, v5.4.6, v5.4.5, v5.4.4, v5.4.3, v5.3.15, v5.4.2, v5.4.1, v5.3.14, v5.4, v5.3.13, v5.3.12, v5.3.11, v5.3.10 |
|
#
e7fad909 |
| 06-Nov-2019 |
Dmitry Fomichev <dmitry.fomichev@wdc.com> |
dm zoned: reduce overhead of backing device checks
Commit 75d66ffb48efb3 added backing device health checks and as a part of these checks, check_events() block ops template call is invoked in dm-zon
dm zoned: reduce overhead of backing device checks
Commit 75d66ffb48efb3 added backing device health checks and as a part of these checks, check_events() block ops template call is invoked in dm-zoned mapping path as well as in reclaim and flush path. Calling check_events() with ATA or SCSI backing devices introduces a blocking scsi_test_unit_ready() call being made in sd_check_events(). Even though the overhead of calling scsi_test_unit_ready() is small for ATA zoned devices, it is much larger for SCSI and it affects performance in a very negative way.
Fix this performance regression by executing check_events() only in case of any I/O errors. The function dmz_bdev_is_dying() is modified to call only blk_queue_dying(), while calls to check_events() are made in a new helper function, dmz_check_bdev().
Reported-by: zhangxiaoxu <zhangxiaoxu5@huawei.com> Fixes: 75d66ffb48efb3 ("dm zoned: properly handle backing device failure") Cc: stable@vger.kernel.org Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|
Revision tags: v5.3.9, v5.3.8, v5.3.7, v5.3.6, v5.3.5, v5.3.4, v5.3.3, v5.3.2, v5.3.1, v5.3, v5.2.14, v5.3-rc8, v5.2.13, v5.2.12, v5.2.11, v5.2.10, v5.2.9, v5.2.8, v5.2.7, v5.2.6 |
|
#
ad1bd578 |
| 02-Aug-2019 |
Dmitry Fomichev <dmitry.fomichev@wdc.com> |
dm zoned: fix a few typos
Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
|
#
bae9a0aa |
| 02-Aug-2019 |
Dmitry Fomichev <dmitry.fomichev@wdc.com> |
dm zoned: add SPDX license identifiers
Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
|
#
75d66ffb |
| 10-Aug-2019 |
Dmitry Fomichev <dmitry.fomichev@wdc.com> |
dm zoned: properly handle backing device failure
dm-zoned is observed to lock up or livelock in case of hardware failure or some misconfiguration of the backing zoned device.
This patch adds a new
dm zoned: properly handle backing device failure
dm-zoned is observed to lock up or livelock in case of hardware failure or some misconfiguration of the backing zoned device.
This patch adds a new dm-zoned target function that checks the status of the backing device. If the request queue of the backing device is found to be in dying state or the SCSI backing device enters offline state, the health check code sets a dm-zoned target flag prompting all further incoming I/O to be rejected. In order to detect backing device failures timely, this new function is called in the request mapping path, at the beginning of every reclaim run and before performing any metadata I/O.
The proper way out of this situation is to do
dmsetup remove <dm-zoned target>
and recreate the target when the problem with the backing device is resolved.
Fixes: 3b1a94c88b79 ("dm zoned: drive-managed zoned block device target") Cc: stable@vger.kernel.org Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com> Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
show more ...
|