From: Peter Rajnoha <prajnoha@redhat.com>
To: lvm-devel@redhat.com
Subject: [PATCH] Add check for semaphore kernel support
Date: Mon, 02 Aug 2010 21:24:57 +0200 [thread overview]
Message-ID: <4C571B89.2030309@redhat.com> (raw)
We also need to check for kernel semaphore support (part of System V IPC,
kernel's CONFIG_SYSVIPC). If not compiled in the kernel, we need to disable
udev synchronisation code and show a warning message at least (so one knows
that it should be added in the kernel or that libdebmapper should be compiled
without udev_sync alternatively).
Inspired by util-linux-ng's ipcs code.
Initiated by the problem reported here:
http://bugs.gentoo.org/show_bug.cgi?id=330375
Peter
---
libdm/libdm-common.c | 33 +++++++++++++++++++++++++++++----
1 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c
index 438e461..23dd761 100644
--- a/libdm/libdm-common.c
+++ b/libdm/libdm-common.c
@@ -60,6 +60,7 @@ static char _dm_dir[PATH_MAX] = DEV_DIR DM_DIR;
static int _verbose = 0;
#ifdef UDEV_SYNC_SUPPORT
+static int _semaphore_supported = -1;
static int _udev_running = -1;
static int _sync_with_udev = 1;
static int _udev_checking = 1;
@@ -929,6 +930,23 @@ int dm_udev_wait(uint32_t cookie)
#else /* UDEV_SYNC_SUPPORT */
+static int _check_semaphore_is_supported()
+{
+ int maxid;
+ union semun arg;
+ struct seminfo seminfo;
+
+ arg.array = (unsigned short int *) (void *) &seminfo;
+ maxid = semctl(0, 0, SEM_INFO, arg);
+
+ if (maxid < 0) {
+ log_warn("Kernel not configured for semaphores (System V IPC). "
+ "Not using udev synchronisation code.");
+ return 0;
+ }
+
+ return 1;
+}
static int _check_udev_is_running(void)
{
@@ -958,20 +976,27 @@ bad:
return 0;
}
-void dm_udev_set_sync_support(int sync_with_udev)
+static void _check_udev_sync_requirements_once()
{
+ if (_semaphore_supported < 0)
+ _semaphore_supported = _check_semaphore_is_supported();
+
if (_udev_running < 0)
_udev_running = _check_udev_is_running();
+}
+void dm_udev_set_sync_support(int sync_with_udev)
+{
+ _check_udev_sync_requirements_once();
_sync_with_udev = sync_with_udev;
}
int dm_udev_get_sync_support(void)
{
- if (_udev_running < 0)
- _udev_running = _check_udev_is_running();
+ _check_udev_sync_requirements_once();
- return dm_cookie_supported() && _udev_running && _sync_with_udev;
+ return _semaphore_supported && dm_cookie_supported() &&
+ _udev_running && _sync_with_udev;
}
void dm_udev_set_checking(int checking)
next reply other threads:[~2010-08-02 19:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-02 19:24 Peter Rajnoha [this message]
2010-08-02 19:42 ` [PATCH] Add check for semaphore kernel support Alasdair G Kergon
2010-08-03 7:05 ` Peter Rajnoha
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C571B89.2030309@redhat.com \
--to=prajnoha@redhat.com \
--cc=lvm-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.