Assume that reads and writes to the variable will be atomic. The worse that could happen is that one of the LRU intervals is not calculated properly if a partially written value is read, but that would only be a transient issue. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> Cc: Jens Axboe <axboe@xxxxxxxxx> Cc: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> Cc: SeongJae Park <sjpark@xxxxxxxxx> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx Cc: linux-block@xxxxxxxxxxxxxxx Cc: J. Roeleveld <joost@xxxxxxxxxxxx> Cc: Jürgen Groß <jgross@xxxxxxxx> --- Documentation/ABI/testing/sysfs-driver-xen-blkback | 10 ++++++++++ drivers/block/xen-blkback/blkback.c | 9 ++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Documentation/ABI/testing/sysfs-driver-xen-blkback b/Documentation/ABI/testing/sysfs-driver-xen-blkback index ecb7942ff146..776f25d335ca 100644 --- a/Documentation/ABI/testing/sysfs-driver-xen-blkback +++ b/Documentation/ABI/testing/sysfs-driver-xen-blkback @@ -35,3 +35,13 @@ Description: controls the duration in milliseconds that blkback will not cache any page not backed by a grant mapping. The default is 10ms. + +What: /sys/module/xen_blkback/parameters/lru_internval +Date: October 2020 +KernelVersion: 5.10 +Contact: Roger Pau Monné <roger.pau@xxxxxxxxxx> +Description: + The LRU mechanism to clean the lists of persistent grants needs + to be executed periodically. This parameter controls the time + interval between consecutive executions of the purge mechanism + is set in ms. diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c index adfc9352351d..6ad9b76fdb2b 100644 --- a/drivers/block/xen-blkback/blkback.c +++ b/drivers/block/xen-blkback/blkback.c @@ -117,7 +117,10 @@ MODULE_PARM_DESC(max_ring_page_order, "Maximum order of pages to be used for the * be executed periodically. The time interval between consecutive executions * of the purge mechanism is set in ms. */ -#define LRU_INTERVAL 100 +static unsigned int lru_interval = 100; +module_param_named(lru_interval, lru_interval, uint, 0644); +MODULE_PARM_DESC(lru_internval, + "Time interval between consecutive executions of the cache purge mechanism (in ms)"); /* * When the persistent grants list is full we will remove unused grants @@ -620,7 +623,7 @@ int xen_blkif_schedule(void *arg) if (unlikely(vbd->size != vbd_sz(vbd))) xen_vbd_resize(blkif); - timeout = msecs_to_jiffies(LRU_INTERVAL); + timeout = msecs_to_jiffies(lru_interval); timeout = wait_event_interruptible_timeout( ring->wq, @@ -650,7 +653,7 @@ int xen_blkif_schedule(void *arg) if (blkif->vbd.feature_gnt_persistent && time_after(jiffies, ring->next_lru)) { purge_persistent_gnt(ring); - ring->next_lru = jiffies + msecs_to_jiffies(LRU_INTERVAL); + ring->next_lru = jiffies + msecs_to_jiffies(lru_interval); } /* Shrink the free pages pool if it is too large. */ -- 2.28.0