From 2a1ee3b5e105d5e42fe536df282d86f1b226245d Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 21 Jan 2025 19:08:56 +0100 Subject: [PATCH 1/5] udisksdaemon: Add 'no_inhibit' argument for job creation functions Avoid placing system inhibit lock if desired. --- src/udisksdaemon.c | 34 ++++++++++++++++++++++++++++------ src/udisksdaemon.h | 15 +++++++++++---- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/udisksdaemon.c b/src/udisksdaemon.c index d7505d8b..8769486b 100644 --- a/src/udisksdaemon.c +++ b/src/udisksdaemon.c @@ -822,6 +822,7 @@ common_job (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, gpointer job) { gchar *job_object_path; @@ -832,9 +833,12 @@ common_job (UDisksDaemon *daemon, job_data = g_new0 (JobData, 1); job_data->daemon = g_object_ref (daemon); /* register inhibitor to systemd logind while job is running */ - operation_description = udisks_client_get_job_description_from_operation (job_operation); - job_data->inhibit_cookie = udisks_daemon_util_inhibit_system_sync (operation_description); - g_free (operation_description); + if (!no_inhibit) + { + operation_description = udisks_client_get_job_description_from_operation (job_operation); + job_data->inhibit_cookie = udisks_daemon_util_inhibit_system_sync (operation_description); + g_free (operation_description); + } if (object != NULL) udisks_base_job_add_object (UDISKS_BASE_JOB (job), object); @@ -863,6 +867,7 @@ common_job (UDisksDaemon *daemon, * @object: (allow-none): A #UDisksObject to add to the job or %NULL. * @job_operation: The operation for the job. * @job_started_by_uid: The user who started the job. + * @no_inhibit: Avoid placing system inhibitor lock. * @cancellable: A #GCancellable or %NULL. * * Launches a new simple job. @@ -879,6 +884,7 @@ udisks_daemon_launch_simple_job (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable) { UDisksSimpleJob *job; @@ -886,7 +892,7 @@ udisks_daemon_launch_simple_job (UDisksDaemon *daemon, g_return_val_if_fail (UDISKS_IS_DAEMON (daemon), NULL); job = udisks_simple_job_new (daemon, cancellable); - return common_job (daemon, object, job_operation, job_started_by_uid, job); + return common_job (daemon, object, job_operation, job_started_by_uid, no_inhibit, job); } /* ---------------------------------------------------------------------------------------------------- */ @@ -897,6 +903,7 @@ udisks_daemon_launch_simple_job (UDisksDaemon *daemon, * @object: (allow-none): A #UDisksObject to add to the job or %NULL. * @job_operation: The operation for the job. * @job_started_by_uid: The user who started the job. + * @no_inhibit: Avoid placing system inhibitor lock. * @job_func: The function to run in another thread. * @user_data: User data to pass to @job_func. * @user_data_free_func: Function to free @user_data with or %NULL. @@ -926,6 +933,7 @@ udisks_daemon_launch_threaded_job (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, UDisksThreadedJobFunc job_func, gpointer user_data, GDestroyNotify user_data_free_func, @@ -941,7 +949,7 @@ udisks_daemon_launch_threaded_job (UDisksDaemon *daemon, user_data_free_func, daemon, cancellable); - return common_job (daemon, object, job_operation, job_started_by_uid, job); + return common_job (daemon, object, job_operation, job_started_by_uid, no_inhibit, job); } /* ---------------------------------------------------------------------------------------------------- */ @@ -952,6 +960,7 @@ udisks_daemon_launch_threaded_job (UDisksDaemon *daemon, * @object: (allow-none): A #UDisksObject to add to the job or %NULL. * @job_operation: The operation for the job. * @job_started_by_uid: The user who started the job. + * @no_inhibit: Avoid placing system inhibitor lock. * @cancellable: A #GCancellable or %NULL. * @run_as_uid: The #uid_t to run the command as. * @run_as_euid: The effective #uid_t to run the command as. @@ -980,6 +989,7 @@ udisks_daemon_launch_spawned_job (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable, uid_t run_as_uid, uid_t run_as_euid, @@ -1003,6 +1013,7 @@ udisks_daemon_launch_spawned_job (UDisksDaemon *daemon, object, job_operation, job_started_by_uid, + no_inhibit, cancellable, run_as_uid, run_as_euid, @@ -1021,6 +1032,7 @@ udisks_daemon_launch_spawned_job (UDisksDaemon *daemon, * @object: (allow-none): A #UDisksObject to add to the job or %NULL. * @job_operation: The operation for the job. * @job_started_by_uid: The user who started the job. + * @no_inhibit: Avoid placing system inhibitor lock. * @cancellable: A #GCancellable or %NULL. * @run_as_uid: The #uid_t to run the command as. * @run_as_euid: The effective #uid_t to run the command as. @@ -1054,6 +1066,7 @@ udisks_daemon_launch_spawned_job_gstring ( UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable, uid_t run_as_uid, uid_t run_as_euid, @@ -1075,7 +1088,7 @@ udisks_daemon_launch_spawned_job_gstring ( job = udisks_spawned_job_new (command_line, input_string, run_as_uid, run_as_euid, daemon, cancellable); g_free (command_line); - return common_job (daemon, object, job_operation, job_started_by_uid, job); + return common_job (daemon, object, job_operation, job_started_by_uid, no_inhibit, job); } /* ---------------------------------------------------------------------------------------------------- */ @@ -1120,6 +1133,7 @@ spawned_job_sync_on_completed (UDisksJob *job, * @object: (allow-none): A #UDisksObject to add to the job or %NULL. * @job_operation: The operation for the job. * @job_started_by_uid: The user who started the job. + * @no_inhibit: Avoid placing system inhibitor lock. * @cancellable: A #GCancellable or %NULL. * @run_as_uid: The #uid_t to run the command as. * @run_as_euid: The effective #uid_t to run the command as. @@ -1139,6 +1153,7 @@ udisks_daemon_launch_spawned_job_sync (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable, uid_t run_as_uid, uid_t run_as_euid, @@ -1164,6 +1179,7 @@ udisks_daemon_launch_spawned_job_sync (UDisksDaemon *daemon, object, job_operation, job_started_by_uid, + no_inhibit, cancellable, run_as_uid, run_as_euid, @@ -1184,6 +1200,7 @@ udisks_daemon_launch_spawned_job_sync (UDisksDaemon *daemon, * @object: (allow-none): A #UDisksObject to add to the job or %NULL. * @job_operation: The operation for the job. * @job_started_by_uid: The user who started the job. + * @no_inhibit: Avoid placing system inhibitor lock. * @cancellable: A #GCancellable or %NULL. * @run_as_uid: The #uid_t to run the command as. * @run_as_euid: The effective #uid_t to run the command as. @@ -1207,6 +1224,7 @@ udisks_daemon_launch_spawned_job_gstring_sync (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable, uid_t run_as_uid, uid_t run_as_euid, @@ -1239,6 +1257,7 @@ udisks_daemon_launch_spawned_job_gstring_sync (UDisksDaemon *daemon, object, job_operation, job_started_by_uid, + no_inhibit, cancellable, run_as_uid, run_as_euid, @@ -1318,6 +1337,7 @@ udisks_bd_thread_disable_progress (void) * @object: (allow-none): A #UDisksObject to add to the job or %NULL. * @job_operation: The operation for the job. * @job_started_by_uid: The user who started the job. + * @no_inhibit: Avoid placing system inhibitor lock. * @job_func: The function to run in another thread. * @user_data: User data to pass to @job_func. * @user_data_free_func: Function to free @user_data with or %NULL. @@ -1334,6 +1354,7 @@ udisks_daemon_launch_threaded_job_sync (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, UDisksThreadedJobFunc job_func, gpointer user_data, GDestroyNotify user_data_free_func, @@ -1350,6 +1371,7 @@ udisks_daemon_launch_threaded_job_sync (UDisksDaemon *daemon, object, job_operation, job_started_by_uid, + no_inhibit, job_func, user_data, user_data_free_func, diff --git a/src/udisksdaemon.h b/src/udisksdaemon.h index 2edbaf3a..2f612c67 100644 --- a/src/udisksdaemon.h +++ b/src/udisksdaemon.h @@ -110,21 +110,24 @@ UDisksBaseJob *udisks_daemon_launch_simple_job (UDisksDaemon * UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable); UDisksBaseJob *udisks_daemon_launch_spawned_job (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable, uid_t run_as_uid, uid_t run_as_euid, const gchar *input_string, const gchar *command_line_format, - ...) G_GNUC_PRINTF (9, 10); + ...) G_GNUC_PRINTF (10, 11); gboolean udisks_daemon_launch_spawned_job_sync (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable, uid_t run_as_uid, uid_t run_as_euid, @@ -132,21 +135,23 @@ gboolean udisks_daemon_launch_spawned_job_sync (UDisksDaemon gchar **out_message, const gchar *input_string, const gchar *command_line_format, - ...) G_GNUC_PRINTF (11, 12); + ...) G_GNUC_PRINTF (12, 13); UDisksBaseJob *udisks_daemon_launch_spawned_job_gstring (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable, uid_t run_as_uid, uid_t run_as_euid, GString *input_string, const gchar *command_line_format, - ...) G_GNUC_PRINTF (9, 10); + ...) G_GNUC_PRINTF (10, 11); gboolean udisks_daemon_launch_spawned_job_gstring_sync (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, GCancellable *cancellable, uid_t run_as_uid, uid_t run_as_euid, @@ -154,11 +159,12 @@ gboolean udisks_daemon_launch_spawned_job_gstring_sync (UDisksD gchar **out_message, GString *input_string, const gchar *command_line_format, - ...) G_GNUC_PRINTF (11, 12); + ...) G_GNUC_PRINTF (12, 13); UDisksBaseJob *udisks_daemon_launch_threaded_job (UDisksDaemon *daemon, UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, UDisksThreadedJobFunc job_func, gpointer user_data, GDestroyNotify user_data_free_func, @@ -168,6 +174,7 @@ gboolean udisks_daemon_launch_threaded_job_sync (UDisksDaemon UDisksObject *object, const gchar *job_operation, uid_t job_started_by_uid, + gboolean no_inhibit, UDisksThreadedJobFunc job_func, gpointer user_data, GDestroyNotify user_data_free_func, -- 2.48.1 From 322863e6b49ae011b8d2f1e2c8741f56dabbb5f3 Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 21 Jan 2025 19:15:45 +0100 Subject: [PATCH 2/5] daemon: Align to the no_inhibit job argument change --- src/udiskslinuxblock.c | 7 ++++++- src/udiskslinuxdrive.c | 1 + src/udiskslinuxdriveata.c | 3 ++- src/udiskslinuxencrypted.c | 6 ++++++ src/udiskslinuxfilesystem.c | 10 ++++++++++ src/udiskslinuxloop.c | 1 + src/udiskslinuxmanager.c | 1 + src/udiskslinuxmdraid.c | 7 +++++++ src/udiskslinuxnvmecontroller.c | 2 ++ src/udiskslinuxnvmenamespace.c | 1 + src/udiskslinuxpartition.c | 6 ++++++ src/udiskslinuxpartitiontable.c | 1 + src/udiskslinuxswapspace.c | 4 ++++ src/udisksstate.c | 2 ++ 14 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/udiskslinuxblock.c b/src/udiskslinuxblock.c index 5b5588b2..008d1265 100644 --- a/src/udiskslinuxblock.c +++ b/src/udiskslinuxblock.c @@ -2482,7 +2482,7 @@ erase_device (UDisksBlock *block, goto out; } - job = udisks_daemon_launch_simple_job (daemon, object, "format-erase", caller_uid, NULL); + job = udisks_daemon_launch_simple_job (daemon, object, "format-erase", caller_uid, FALSE, NULL); udisks_base_job_set_auto_estimate (UDISKS_BASE_JOB (job), TRUE); udisks_job_set_progress_valid (UDISKS_JOB (job), TRUE); @@ -3185,6 +3185,7 @@ format_create_luks (UDisksDaemon *daemon, object, "format-mkfs", caller_uid, + FALSE, luks_format_job_func, &crypto_job_data, NULL, /* user_data_free_func */ @@ -3229,6 +3230,7 @@ format_create_luks (UDisksDaemon *daemon, object, "format-mkfs", caller_uid, + FALSE, luks_open_job_func, &crypto_job_data, NULL, /* user_data_free_func */ @@ -3571,6 +3573,7 @@ udisks_linux_block_handle_format (UDisksBlock *block, object, "format-mkfs", caller_uid, + FALSE, format_job_func, &format_job_data, NULL, /* user_data_free_func */ @@ -3679,6 +3682,7 @@ udisks_linux_block_handle_format (UDisksBlock *block, object, "format-mkfs", caller_uid, + FALSE, format_job_func, &format_job_data, NULL, /* user_data_free_func */ @@ -4268,6 +4272,7 @@ handle_restore_encrypted_header (UDisksBlock *encrypted, UDISKS_OBJECT (object), "block-restore-encrypted-header", caller_uid, + FALSE, NULL); if (job == NULL) { diff --git a/src/udiskslinuxdrive.c b/src/udiskslinuxdrive.c index 18b9ae4f..93ca3813 100644 --- a/src/udiskslinuxdrive.c +++ b/src/udiskslinuxdrive.c @@ -1142,6 +1142,7 @@ handle_eject (UDisksDrive *_drive, if (!udisks_daemon_launch_spawned_job_sync (daemon, UDISKS_OBJECT (object), "drive-eject", caller_uid, + FALSE, NULL, /* GCancellable */ 0, /* uid_t run_as_uid */ 0, /* uid_t run_as_euid */ diff --git a/src/udiskslinuxdriveata.c b/src/udiskslinuxdriveata.c index 0675d1ed..dd7b0b0d 100644 --- a/src/udiskslinuxdriveata.c +++ b/src/udiskslinuxdriveata.c @@ -1194,6 +1194,7 @@ handle_smart_selftest_start (UDisksDriveAta *_drive, drive->selftest_job = UDISKS_THREADED_JOB (udisks_daemon_launch_threaded_job (daemon, UDISKS_OBJECT (object), "ata-smart-selftest", caller_uid, + FALSE, selftest_job_func, g_object_ref (drive), g_object_unref, @@ -2226,7 +2227,7 @@ udisks_linux_drive_ata_secure_erase_sync (UDisksLinuxDriveAta *drive, job = udisks_daemon_launch_simple_job (daemon, UDISKS_OBJECT (object), enhanced ? "ata-enhanced-secure-erase" : "ata-secure-erase", - caller_uid, NULL); + caller_uid, FALSE, NULL); udisks_job_set_cancelable (UDISKS_JOB (job), FALSE); /* A value of 510 (255 in the IDENTIFY DATA register) means "erase diff --git a/src/udiskslinuxencrypted.c b/src/udiskslinuxencrypted.c index f6ae85c7..bb1f9e10 100644 --- a/src/udiskslinuxencrypted.c +++ b/src/udiskslinuxencrypted.c @@ -588,6 +588,7 @@ handle_unlock (UDisksEncrypted *encrypted, object, "encrypted-unlock", caller_uid, + FALSE, open_func, &data, NULL, /* user_data_free_func */ @@ -807,6 +808,7 @@ udisks_linux_encrypted_lock (UDisksLinuxEncrypted *encrypted, object, "encrypted-lock", caller_uid, + FALSE, close_func, &data, NULL, /* user_data_free_func */ @@ -991,6 +993,7 @@ handle_change_passphrase (UDisksEncrypted *encrypted, object, "encrypted-modify", caller_uid, + FALSE, luks_change_key_job_func, &data, NULL, /* user_data_free_func */ @@ -1155,6 +1158,7 @@ handle_resize (UDisksEncrypted *encrypted, UDISKS_OBJECT (object), "encrypted-resize", caller_uid, + FALSE, NULL); if (job == NULL) { @@ -1296,6 +1300,7 @@ handle_convert (UDisksEncrypted *encrypted, UDISKS_OBJECT (object), "encrypted-convert", caller_uid, + FALSE, NULL); if (job == NULL) { @@ -1389,6 +1394,7 @@ handle_header_backup (UDisksEncrypted *encrypted, UDISKS_OBJECT (object), "encrypted-header-backup", caller_uid, + FALSE, NULL); if (job == NULL) { diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c index e7df067d..b1974483 100644 --- a/src/udiskslinuxfilesystem.c +++ b/src/udiskslinuxfilesystem.c @@ -983,6 +983,7 @@ handle_mount_fstab (UDisksDaemon *daemon, UDISKS_OBJECT (object), "filesystem-mount", mount_fstab_as_root ? 0 : caller_uid, + FALSE, NULL /* cancellable */); /* XXX: using run_as_uid for root doesn't work even if the caller is already root */ @@ -1208,6 +1209,7 @@ handle_mount_dynamic (UDisksDaemon *daemon, UDISKS_OBJECT (object), "filesystem-mount", 0, + FALSE, NULL /* cancellable */); success = FALSE; @@ -1564,6 +1566,7 @@ handle_unmount (UDisksFilesystem *filesystem, UDISKS_OBJECT (object), "filesystem-unmount", unmount_fstab_as_root ? 0 : caller_uid, + FALSE, NULL); if (!unmount_fstab_as_root && caller_uid != 0) @@ -1669,6 +1672,7 @@ handle_unmount (UDisksFilesystem *filesystem, UDISKS_OBJECT (object), "filesystem-unmount", 0, + FALSE, NULL); if (!bd_fs_unmount (mount_point ? mount_point : udisks_block_get_device (block), @@ -1850,6 +1854,7 @@ handle_set_label (UDisksFilesystem *filesystem, object, "filesystem-modify", caller_uid, + FALSE, NULL /* cancellable */); if (job == NULL) { @@ -2030,6 +2035,7 @@ handle_resize (UDisksFilesystem *filesystem, UDISKS_OBJECT (object), "filesystem-resize", caller_uid, + FALSE, NULL); if (job == NULL) { @@ -2201,6 +2207,7 @@ handle_repair (UDisksFilesystem *filesystem, UDISKS_OBJECT (object), "filesystem-repair", caller_uid, + FALSE, NULL); if (job == NULL) { @@ -2369,6 +2376,7 @@ handle_check (UDisksFilesystem *filesystem, UDISKS_OBJECT (object), "filesystem-check", caller_uid, + FALSE, NULL); if (job == NULL) { @@ -2518,6 +2526,7 @@ handle_take_ownership (UDisksFilesystem *filesystem, UDISKS_OBJECT (object), "filesystem-modify", caller_uid, + FALSE, NULL); if (job == NULL) { @@ -2698,6 +2707,7 @@ handle_set_uuid (UDisksFilesystem *filesystem, object, "filesystem-modify", caller_uid, + FALSE, NULL /* cancellable */); if (job == NULL) { diff --git a/src/udiskslinuxloop.c b/src/udiskslinuxloop.c index 500df6ef..ee690991 100644 --- a/src/udiskslinuxloop.c +++ b/src/udiskslinuxloop.c @@ -249,6 +249,7 @@ handle_delete (UDisksLoop *loop, UDISKS_OBJECT(object), "loop-setup", caller_uid, + FALSE, NULL); if (job == NULL) diff --git a/src/udiskslinuxmanager.c b/src/udiskslinuxmanager.c index 139be7ca..4e633284 100644 --- a/src/udiskslinuxmanager.c +++ b/src/udiskslinuxmanager.c @@ -598,6 +598,7 @@ handle_mdraid_create (UDisksManager *_object, NULL, "mdraid-create", caller_uid, + FALSE, NULL); if (job == NULL) diff --git a/src/udiskslinuxmdraid.c b/src/udiskslinuxmdraid.c index 176b0258..a24c78c2 100644 --- a/src/udiskslinuxmdraid.c +++ b/src/udiskslinuxmdraid.c @@ -371,6 +371,7 @@ udisks_linux_mdraid_update (UDisksLinuxMDRaid *mdraid, UDISKS_OBJECT (object), sync_action_to_job_id (sync_action), 0, + FALSE, NULL /* cancellable */); /* Mark the job as not cancellable. It simply has to finish... */ @@ -643,6 +644,7 @@ handle_start (UDisksMDRaid *_mdraid, UDISKS_OBJECT (object), "md-raid-start", caller_uid, + FALSE, NULL); if (job == NULL) @@ -805,6 +807,7 @@ udisks_linux_mdraid_stop (UDisksMDRaid *_mdraid, UDISKS_OBJECT (object), "md-raid-stop", caller_uid, + FALSE, NULL); if (job == NULL) @@ -1026,6 +1029,7 @@ handle_remove_device (UDisksMDRaid *_mdraid, UDISKS_OBJECT (object), "md-raid-remove-device", caller_uid, + FALSE, NULL); if (job == NULL) @@ -1170,6 +1174,7 @@ handle_add_device (UDisksMDRaid *_mdraid, UDISKS_OBJECT (object), "md-raid-add-device", caller_uid, + FALSE, NULL); if (job == NULL) @@ -1286,6 +1291,7 @@ handle_set_bitmap_location (UDisksMDRaid *_mdraid, UDISKS_OBJECT (object), "md-raid-set-bitmap", caller_uid, + FALSE, NULL); if (job == NULL) @@ -1403,6 +1409,7 @@ handle_request_sync_action (UDisksMDRaid *_mdraid, UDISKS_OBJECT (object), sync_action_to_job_id (sync_action), caller_uid, + FALSE, NULL); if (job == NULL) diff --git a/src/udiskslinuxnvmecontroller.c b/src/udiskslinuxnvmecontroller.c index b032467e..dff3ab06 100644 --- a/src/udiskslinuxnvmecontroller.c +++ b/src/udiskslinuxnvmecontroller.c @@ -873,6 +873,7 @@ handle_smart_selftest_start (UDisksNVMeController *_ctrl, UDISKS_OBJECT (object), "nvme-selftest", caller_uid, + FALSE, selftest_job_func, g_object_ref (ctrl), (GDestroyNotify) selftest_job_func_done, @@ -1298,6 +1299,7 @@ handle_sanitize_start (UDisksNVMeController *_object, UDISKS_OBJECT (object), "nvme-sanitize", caller_uid, + FALSE, sanitize_job_func, g_object_ref (ctrl), (GDestroyNotify) sanitize_job_func_done, diff --git a/src/udiskslinuxnvmenamespace.c b/src/udiskslinuxnvmenamespace.c index 076c2285..ddb03e22 100644 --- a/src/udiskslinuxnvmenamespace.c +++ b/src/udiskslinuxnvmenamespace.c @@ -429,6 +429,7 @@ handle_format_namespace (UDisksNVMeNamespace *_ns, UDISKS_OBJECT (object), "nvme-format-ns", caller_uid, + FALSE, format_ns_job_func, data, (GDestroyNotify) format_ns_job_func_done, diff --git a/src/udiskslinuxpartition.c b/src/udiskslinuxpartition.c index c4433627..2e07ca2c 100644 --- a/src/udiskslinuxpartition.c +++ b/src/udiskslinuxpartition.c @@ -389,6 +389,7 @@ handle_set_flags (UDisksPartition *partition, UDISKS_OBJECT (object), "partition-modify", caller_uid, + FALSE, NULL); if (job == NULL) @@ -527,6 +528,7 @@ handle_set_name (UDisksPartition *partition, UDISKS_OBJECT (object), "partition-modify", caller_uid, + FALSE, NULL); if (job == NULL) @@ -669,6 +671,7 @@ handle_set_uuid (UDisksPartition *partition, UDISKS_OBJECT (object), "partition-modify", caller_uid, + FALSE, NULL); if (job == NULL) @@ -774,6 +777,7 @@ udisks_linux_partition_set_type_sync (UDisksLinuxPartition *partition, UDISKS_OBJECT (object), "partition-modify", caller_uid, + FALSE, NULL); if (job == NULL) @@ -984,6 +988,7 @@ handle_resize (UDisksPartition *partition, UDISKS_OBJECT (object), "partition-modify", caller_uid, + FALSE, NULL); if (job == NULL) @@ -1115,6 +1120,7 @@ handle_delete (UDisksPartition *partition, UDISKS_OBJECT (object), "partition-delete", caller_uid, + FALSE, NULL); if (job == NULL) diff --git a/src/udiskslinuxpartitiontable.c b/src/udiskslinuxpartitiontable.c index 528b22ff..09bd545b 100644 --- a/src/udiskslinuxpartitiontable.c +++ b/src/udiskslinuxpartitiontable.c @@ -422,6 +422,7 @@ udisks_linux_partition_table_handle_create_partition (UDisksPartitionTable *ta UDISKS_OBJECT (object), "partition-create", caller_uid, + FALSE, NULL); if (job == NULL) diff --git a/src/udiskslinuxswapspace.c b/src/udiskslinuxswapspace.c index 0c4fd9a4..4c51bd88 100644 --- a/src/udiskslinuxswapspace.c +++ b/src/udiskslinuxswapspace.c @@ -201,6 +201,7 @@ handle_start (UDisksSwapspace *swapspace, object, "swapspace-start", caller_uid, + FALSE, start_job_func, object, NULL, /* user_data_free_func */ @@ -299,6 +300,7 @@ handle_stop (UDisksSwapspace *swapspace, object, "swapspace-stop", caller_uid, + FALSE, stop_job_func, object, NULL, /* user_data_free_func */ @@ -376,6 +378,7 @@ handle_set_label (UDisksSwapspace *swapspace, UDISKS_OBJECT (object), "swapspace-modify", caller_uid, + FALSE, NULL); if (job == NULL) { @@ -462,6 +465,7 @@ handle_set_uuid (UDisksSwapspace *swapspace, UDISKS_OBJECT (object), "swapspace-modify", caller_uid, + FALSE, NULL); if (job == NULL) { diff --git a/src/udisksstate.c b/src/udisksstate.c index df6ef337..7323036d 100644 --- a/src/udisksstate.c +++ b/src/udisksstate.c @@ -783,6 +783,7 @@ udisks_state_check_mounted_fs_entry (UDisksState *state, if (!udisks_daemon_launch_spawned_job_sync (state->daemon, NULL, /* UDisksObject */ "cleanup", 0, /* StartedByUID */ + FALSE, NULL, /* GCancellable */ 0, /* uid_t run_as_uid */ 0, /* uid_t run_as_euid */ @@ -1247,6 +1248,7 @@ udisks_state_check_unlocked_crypto_dev_entry (UDisksState *state, NULL, /* UDisksObject */ "cleanup", 0, /* StartedByUID */ + FALSE, luks_close_job_func, &data, NULL, /* user_data_free_func */ -- 2.48.1 From 6d3ca4c21d3a9724aab4c021cc9c5c0b3fc39a1e Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 21 Jan 2025 19:16:11 +0100 Subject: [PATCH 3/5] lvm2: Align to the no_inhibit job argument change --- modules/lvm2/udiskslinuxlogicalvolume.c | 9 +++++++++ modules/lvm2/udiskslinuxmanagerlvm2.c | 2 ++ modules/lvm2/udiskslinuxvdovolume.c | 2 ++ modules/lvm2/udiskslinuxvolumegroup.c | 8 ++++++++ 4 files changed, 21 insertions(+) diff --git a/modules/lvm2/udiskslinuxlogicalvolume.c b/modules/lvm2/udiskslinuxlogicalvolume.c index c0c43c03..f517f7cc 100644 --- a/modules/lvm2/udiskslinuxlogicalvolume.c +++ b/modules/lvm2/udiskslinuxlogicalvolume.c @@ -593,6 +593,7 @@ handle_delete (UDisksLogicalVolume *_volume, UDISKS_OBJECT (object), "lvm-lvol-delete", caller_uid, + FALSE, lvremove_job_func, &data, NULL, /* user_data_free_func */ @@ -669,6 +670,7 @@ handle_repair (UDisksLogicalVolume *_volume, UDISKS_OBJECT (object), "lvm-lvol-repair", caller_uid, + FALSE, lvrepair_job_func, &data, NULL, /* user_data_free_func */ @@ -766,6 +768,7 @@ handle_rename (UDisksLogicalVolume *_volume, UDISKS_OBJECT (object), "lvm-lvol-rename", caller_uid, + FALSE, lvrename_job_func, &data, NULL, /* user_data_free_func */ @@ -848,6 +851,7 @@ handle_resize (UDisksLogicalVolume *_volume, UDISKS_OBJECT (object), "lvm-lvol-resize", caller_uid, + FALSE, lvresize_job_func, &data, NULL, /* user_data_free_func */ @@ -937,6 +941,7 @@ handle_activate (UDisksLogicalVolume *_volume, UDISKS_OBJECT (object), "lvm-lvol-activate", caller_uid, + FALSE, lvactivate_job_func, &data, NULL, /* user_data_free_func */ @@ -1005,6 +1010,7 @@ handle_deactivate (UDisksLogicalVolume *_volume, UDISKS_OBJECT (object), "lvm-lvol-deactivate", caller_uid, + FALSE, lvdeactivate_job_func, &data, NULL, /* user_data_free_func */ @@ -1074,6 +1080,7 @@ handle_create_snapshot (UDisksLogicalVolume *_volume, UDISKS_OBJECT (object), "lvm-lvol-snapshot", caller_uid, + FALSE, lvsnapshot_create_job_func, &data, NULL, /* user_data_free_func */ @@ -1134,6 +1141,7 @@ handle_cache_attach (UDisksLogicalVolume *volume_, UDISKS_OBJECT (object), "lvm-lv-make-cache", caller_uid, + FALSE, lvcache_attach_job_func, &data, NULL, /* user_data_free_func */ @@ -1185,6 +1193,7 @@ handle_cache_detach_or_split (UDisksLogicalVolume *volume_, UDISKS_OBJECT (object), "lvm-lv-split-cache", caller_uid, + FALSE, lvcache_detach_job_func, &data, NULL, /* user_data_free_func */ diff --git a/modules/lvm2/udiskslinuxmanagerlvm2.c b/modules/lvm2/udiskslinuxmanagerlvm2.c index 5c06b921..7cd96384 100644 --- a/modules/lvm2/udiskslinuxmanagerlvm2.c +++ b/modules/lvm2/udiskslinuxmanagerlvm2.c @@ -338,6 +338,7 @@ handle_volume_group_create (UDisksManagerLVM2 *_object, NULL, "lvm-pv-create", caller_uid, + FALSE, pvcreate_job_func, &pv_data, NULL, /* user_data_free_func */ @@ -363,6 +364,7 @@ handle_volume_group_create (UDisksManagerLVM2 *_object, NULL, "lvm-vg-create", caller_uid, + FALSE, vgcreate_job_func, &data, NULL, /* user_data_free_func */ diff --git a/modules/lvm2/udiskslinuxvdovolume.c b/modules/lvm2/udiskslinuxvdovolume.c index 19164d96..64247dfc 100644 --- a/modules/lvm2/udiskslinuxvdovolume.c +++ b/modules/lvm2/udiskslinuxvdovolume.c @@ -262,6 +262,7 @@ _set_compression_deduplication (UDisksVDOVolume *_volume, UDISKS_OBJECT (object), "lvm-vdo-dedup-comp", caller_uid, + FALSE, compression ? lv_vdo_compression_job_func : lv_vdo_deduplication_job_func, &data, NULL, /* user_data_free_func */ @@ -340,6 +341,7 @@ _vdo_resize (UDisksLinuxLogicalVolumeObject *object, UDISKS_OBJECT (object), "lvm-lvol-resize", caller_uid, + FALSE, lvresize_job_func, &data, NULL, /* user_data_free_func */ diff --git a/modules/lvm2/udiskslinuxvolumegroup.c b/modules/lvm2/udiskslinuxvolumegroup.c index 5cb904e2..e1c6d76e 100644 --- a/modules/lvm2/udiskslinuxvolumegroup.c +++ b/modules/lvm2/udiskslinuxvolumegroup.c @@ -336,6 +336,7 @@ handle_delete (UDisksVolumeGroup *_group, UDISKS_OBJECT (object), "lvm-vg-delete", caller_uid, + FALSE, vgremove_job_func, &data, NULL, /* user_data_free_func */ @@ -457,6 +458,7 @@ handle_rename (UDisksVolumeGroup *_group, UDISKS_OBJECT (object), "lvm-vg-rename", caller_uid, + FALSE, vgrename_job_func, &data, NULL, /* user_data_free_func */ @@ -585,6 +587,7 @@ handle_add_device (UDisksVolumeGroup *_group, UDISKS_OBJECT (object), "lvm-pv-create", caller_uid, + FALSE, pvcreate_job_func, &pv_data, NULL, /* user_data_free_func */ @@ -610,6 +613,7 @@ handle_add_device (UDisksVolumeGroup *_group, UDISKS_OBJECT (object), "lvm-vg-add-device", caller_uid, + FALSE, vgextend_job_func, &data, NULL, /* user_data_free_func */ @@ -729,6 +733,7 @@ handle_remove_common (UDisksVolumeGroup *_group, UDISKS_OBJECT (object), job_operation, caller_uid, + FALSE, job_func, &data, NULL, /* user_data_free_func */ @@ -751,6 +756,7 @@ handle_remove_common (UDisksVolumeGroup *_group, UDISKS_OBJECT (object), "pv-format-erase", caller_uid, + FALSE, pvremove_job_func, &data, NULL, /* user_data_free_func */ @@ -854,6 +860,7 @@ handle_remove_missing_physical_volumes (UDisksVolumeGroup *_group, UDISKS_OBJECT (object), "lvm-vg-rem-device", caller_uid, + FALSE, vgreduce_job_func, &data, NULL, /* user_data_free_func */ @@ -1098,6 +1105,7 @@ handle_create_volume (UDisksVolumeGroup *_group, UDISKS_OBJECT (object), "lvm-vg-create-volume", caller_uid, + FALSE, create_function, &data, NULL, /* user_data_free_func */ -- 2.48.1 From 6e8948401251f60e5cd8989ec4992974b375f4ed Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 21 Jan 2025 19:19:05 +0100 Subject: [PATCH 4/5] udiskslinuxmdraid: Avoid putting inhibit lock for externally started operations UDisks publishes a new job object whenever it sees an array in sync, repair or generally any other operation running. However this involves acquiring and holding a system inhibit lock for the whole duration of the operation, which for large disks may take hours or days. Besides, mdraid resync is a restartable operation, defeating the purpose for an inhibit lock. This is also causing problems for installation environments where UDisks is blocking post-installation reboot until the operation is done. --- src/udiskslinuxmdraid.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/udiskslinuxmdraid.c b/src/udiskslinuxmdraid.c index a24c78c2..0ca9d681 100644 --- a/src/udiskslinuxmdraid.c +++ b/src/udiskslinuxmdraid.c @@ -371,8 +371,8 @@ udisks_linux_mdraid_update (UDisksLinuxMDRaid *mdraid, UDISKS_OBJECT (object), sync_action_to_job_id (sync_action), 0, - FALSE, - NULL /* cancellable */); + TRUE, /* no_inhibit */ + NULL /* cancellable */); /* Mark the job as not cancellable. It simply has to finish... */ udisks_job_set_cancelable (UDISKS_JOB (job), FALSE); -- 2.48.1