[dm-devel] [PATCH] dm-thin: stop no_space_timeout worker before switch to write-mode
Hou Tao
houtao1 at huawei.com
Thu Aug 2 08:18:24 UTC 2018
Now both check_for_space() and do_no_space_timeout() will read & write
error_if_no_space in pool->pf. If these functions run concurrently as
shown in the following case, the error_if_no_space feature requested
by user may get lost.
precondition:
* error_if_no_space = 0
* Out-of-Data-Space occurs
* no_space_timeout worker has been queued
CPU 0: CPU 1:
// delete a thin device
process_delete_mesg()
// inovked by commit()
set_pool_mode(pool, PM_WRITE)
pool->pf.error_if_no_space = \
pt->requested_pf.error_if_no_space
// timeout
do_no_space_timeout
// the user configuration is lost
pool->pf.error_if_no_space = true
pool->pf.mode = new_mode
Fix it by stopping no_space_timeout worker before switching to write mode.
Signed-off-by: Hou Tao <houtao1 at huawei.com>
---
drivers/md/dm-thin.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index b900723bbd0f..c6da4afc16cf 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -1401,6 +1401,7 @@ static void check_for_space(struct pool *pool)
return;
if (nr_free) {
+ cancel_delayed_work_sync(&pool->no_space_timeout);
set_pool_mode(pool, PM_WRITE);
requeue_bios(pool);
}
--
2.16.2.dirty
More information about the dm-devel
mailing list