* [PATCH] xen/manage: unwind partial shutdown watcher setup on error
@ 2026-04-07 2:24 zhaoguohan
2026-04-09 1:42 ` Stefano Stabellini
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: zhaoguohan @ 2026-04-07 2:24 UTC (permalink / raw)
To: jgross, sstabellini
Cc: oleksandr_tyshchenko, xen-devel, linux-kernel, GuoHan Zhao
From: GuoHan Zhao <zhaoguohan@kylinos.cn>
setup_shutdown_watcher() registers shutdown_watch first, then the sysrq
watch, and finally publishes the supported feature-* nodes in xenstore.
If sysrq watch registration fails, or xenbus_printf() fails after one or
more feature nodes were created, the function returns immediately without
undoing the earlier setup.
This leaves the system in a partially initialized state, with registered
watches and/or stale xenstore entries despite the function reporting
failure.
Unwind the partial setup before returning an error by unregistering any
watches that were already registered and removing feature nodes that were
already published.
Signed-off-by: GuoHan Zhao <zhaoguohan@kylinos.cn>
---
drivers/xen/manage.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
index e20c40a62e64..18bf09e0192a 100644
--- a/drivers/xen/manage.c
+++ b/drivers/xen/manage.c
@@ -343,12 +343,11 @@ static int setup_shutdown_watcher(void)
return err;
}
-
#ifdef CONFIG_MAGIC_SYSRQ
err = register_xenbus_watch(&sysrq_watch);
if (err) {
pr_err("Failed to set sysrq watcher\n");
- return err;
+ goto err_unregister_shutdown;
}
#endif
@@ -361,11 +360,26 @@ static int setup_shutdown_watcher(void)
if (err) {
pr_err("%s: Error %d writing %s\n", __func__,
err, node);
- return err;
+ goto err_remove_features;
}
}
return 0;
+
+err_remove_features:
+ while (--idx >= 0) {
+ if (!shutdown_handlers[idx].flag)
+ continue;
+ snprintf(node, FEATURE_PATH_SIZE, "feature-%s",
+ shutdown_handlers[idx].command);
+ xenbus_rm(XBT_NIL, "control", node);
+ }
+#ifdef CONFIG_MAGIC_SYSRQ
+ unregister_xenbus_watch(&sysrq_watch);
+#endif
+err_unregister_shutdown:
+ unregister_xenbus_watch(&shutdown_watch);
+ return err;
}
static int shutdown_event(struct notifier_block *notifier,
--
2.43.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] xen/manage: unwind partial shutdown watcher setup on error
2026-04-07 2:24 [PATCH] xen/manage: unwind partial shutdown watcher setup on error zhaoguohan
@ 2026-04-09 1:42 ` Stefano Stabellini
2026-04-21 11:08 ` kernel test robot
2026-04-21 19:33 ` kernel test robot
2 siblings, 0 replies; 4+ messages in thread
From: Stefano Stabellini @ 2026-04-09 1:42 UTC (permalink / raw)
To: GuoHan Zhao
Cc: jgross, sstabellini, oleksandr_tyshchenko, xen-devel,
linux-kernel
On Tue, 7 Apr 2026, zhaoguohan@kylinos.cn wrote:
> From: GuoHan Zhao <zhaoguohan@kylinos.cn>
>
> setup_shutdown_watcher() registers shutdown_watch first, then the sysrq
> watch, and finally publishes the supported feature-* nodes in xenstore.
> If sysrq watch registration fails, or xenbus_printf() fails after one or
> more feature nodes were created, the function returns immediately without
> undoing the earlier setup.
>
> This leaves the system in a partially initialized state, with registered
> watches and/or stale xenstore entries despite the function reporting
> failure.
>
> Unwind the partial setup before returning an error by unregistering any
> watches that were already registered and removing feature nodes that were
> already published.
>
> Signed-off-by: GuoHan Zhao <zhaoguohan@kylinos.cn>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] xen/manage: unwind partial shutdown watcher setup on error
2026-04-07 2:24 [PATCH] xen/manage: unwind partial shutdown watcher setup on error zhaoguohan
2026-04-09 1:42 ` Stefano Stabellini
@ 2026-04-21 11:08 ` kernel test robot
2026-04-21 19:33 ` kernel test robot
2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2026-04-21 11:08 UTC (permalink / raw)
To: zhaoguohan, jgross, sstabellini
Cc: oe-kbuild-all, oleksandr_tyshchenko, xen-devel, linux-kernel,
GuoHan Zhao
Hi,
kernel test robot noticed the following build warnings:
[auto build test WARNING on v7.0]
[cannot apply to xen-tip/linux-next linus/master next-20260420]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/zhaoguohan-kylinos-cn/xen-manage-unwind-partial-shutdown-watcher-setup-on-error/20260416-185003
base: v7.0
patch link: https://lore.kernel.org/r/20260407022443.12971-1-zhaoguohan%40kylinos.cn
patch subject: [PATCH] xen/manage: unwind partial shutdown watcher setup on error
config: arm64-randconfig-002-20260421 (https://download.01.org/0day-ci/archive/20260421/202604211801.rqptlYaS-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 13.4.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260421/202604211801.rqptlYaS-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202604211801.rqptlYaS-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/xen/manage.c: In function 'setup_shutdown_watcher':
>> drivers/xen/manage.c:380:1: warning: label 'err_unregister_shutdown' defined but not used [-Wunused-label]
380 | err_unregister_shutdown:
| ^~~~~~~~~~~~~~~~~~~~~~~
drivers/xen/manage.c: In function 'shutdown_event':
drivers/xen/manage.c:357:60: warning: '%s' directive output may be truncated writing up to 71 bytes into a region of size 12 [-Wformat-truncation=]
357 | snprintf(node, FEATURE_PATH_SIZE, "feature-%s",
| ^~
In function 'setup_shutdown_watcher',
inlined from 'shutdown_event' at drivers/xen/manage.c:389:2:
drivers/xen/manage.c:357:17: note: 'snprintf' output between 9 and 80 bytes into a destination of size 20
357 | snprintf(node, FEATURE_PATH_SIZE, "feature-%s",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
358 | shutdown_handlers[idx].command);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/err_unregister_shutdown +380 drivers/xen/manage.c
353
354 for (idx = 0; idx < ARRAY_SIZE(shutdown_handlers); idx++) {
355 if (!shutdown_handlers[idx].flag)
356 continue;
357 snprintf(node, FEATURE_PATH_SIZE, "feature-%s",
358 shutdown_handlers[idx].command);
359 err = xenbus_printf(XBT_NIL, "control", node, "%u", 1);
360 if (err) {
361 pr_err("%s: Error %d writing %s\n", __func__,
362 err, node);
363 goto err_remove_features;
364 }
365 }
366
367 return 0;
368
369 err_remove_features:
370 while (--idx >= 0) {
371 if (!shutdown_handlers[idx].flag)
372 continue;
373 snprintf(node, FEATURE_PATH_SIZE, "feature-%s",
374 shutdown_handlers[idx].command);
375 xenbus_rm(XBT_NIL, "control", node);
376 }
377 #ifdef CONFIG_MAGIC_SYSRQ
378 unregister_xenbus_watch(&sysrq_watch);
379 #endif
> 380 err_unregister_shutdown:
381 unregister_xenbus_watch(&shutdown_watch);
382 return err;
383 }
384
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] xen/manage: unwind partial shutdown watcher setup on error
2026-04-07 2:24 [PATCH] xen/manage: unwind partial shutdown watcher setup on error zhaoguohan
2026-04-09 1:42 ` Stefano Stabellini
2026-04-21 11:08 ` kernel test robot
@ 2026-04-21 19:33 ` kernel test robot
2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2026-04-21 19:33 UTC (permalink / raw)
To: zhaoguohan, jgross, sstabellini
Cc: llvm, oe-kbuild-all, oleksandr_tyshchenko, xen-devel,
linux-kernel, GuoHan Zhao
Hi,
kernel test robot noticed the following build warnings:
[auto build test WARNING on v7.0]
[cannot apply to xen-tip/linux-next linus/master next-20260421]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/zhaoguohan-kylinos-cn/xen-manage-unwind-partial-shutdown-watcher-setup-on-error/20260416-185003
base: v7.0
patch link: https://lore.kernel.org/r/20260407022443.12971-1-zhaoguohan%40kylinos.cn
patch subject: [PATCH] xen/manage: unwind partial shutdown watcher setup on error
config: arm64-randconfig-001-20260421 (https://download.01.org/0day-ci/archive/20260422/202604220332.2gWBxnrF-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 5bac06718f502014fade905512f1d26d578a18f3)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260422/202604220332.2gWBxnrF-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202604220332.2gWBxnrF-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/xen/manage.c:380:1: warning: unused label 'err_unregister_shutdown' [-Wunused-label]
380 | err_unregister_shutdown:
| ^~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
vim +/err_unregister_shutdown +380 drivers/xen/manage.c
353
354 for (idx = 0; idx < ARRAY_SIZE(shutdown_handlers); idx++) {
355 if (!shutdown_handlers[idx].flag)
356 continue;
357 snprintf(node, FEATURE_PATH_SIZE, "feature-%s",
358 shutdown_handlers[idx].command);
359 err = xenbus_printf(XBT_NIL, "control", node, "%u", 1);
360 if (err) {
361 pr_err("%s: Error %d writing %s\n", __func__,
362 err, node);
363 goto err_remove_features;
364 }
365 }
366
367 return 0;
368
369 err_remove_features:
370 while (--idx >= 0) {
371 if (!shutdown_handlers[idx].flag)
372 continue;
373 snprintf(node, FEATURE_PATH_SIZE, "feature-%s",
374 shutdown_handlers[idx].command);
375 xenbus_rm(XBT_NIL, "control", node);
376 }
377 #ifdef CONFIG_MAGIC_SYSRQ
378 unregister_xenbus_watch(&sysrq_watch);
379 #endif
> 380 err_unregister_shutdown:
381 unregister_xenbus_watch(&shutdown_watch);
382 return err;
383 }
384
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-04-21 19:33 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-07 2:24 [PATCH] xen/manage: unwind partial shutdown watcher setup on error zhaoguohan
2026-04-09 1:42 ` Stefano Stabellini
2026-04-21 11:08 ` kernel test robot
2026-04-21 19:33 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox