systemd/1032-udev-guard-REREADPT-by-exclusive-lock-instead-of-O_E.patch
Robert Milasan 3595bbe8f8 Accepting request 236618 from home:rmilasan:branches:Base:System
- Add upstream patches
  1025-udev-exclude-device-mapper-from-block-device-ownersh.patch
  1026-udevd-inotify-modernizations.patch
  1027-udev-synthesize-change-events-for-partitions-when-to.patch
  1028-udev-link-config-fix-mem-leak.patch
  1029-udev-try-first-re-reading-the-partition-table.patch
  1030-udev-guard-REREADP-logic-with-open-O_ECXL.patch
  1031-udev-make-sure-we-always-get-change-for-the-disk.patch
  1032-udev-guard-REREADPT-by-exclusive-lock-instead-of-O_E.patch 

- Add upstream patches
  1025-udev-exclude-device-mapper-from-block-device-ownersh.patch
  1026-udevd-inotify-modernizations.patch
  1027-udev-synthesize-change-events-for-partitions-when-to.patch
  1028-udev-link-config-fix-mem-leak.patch
  1029-udev-try-first-re-reading-the-partition-table.patch
  1030-udev-guard-REREADP-logic-with-open-O_ECXL.patch
  1031-udev-make-sure-we-always-get-change-for-the-disk.patch
  1032-udev-guard-REREADPT-by-exclusive-lock-instead-of-O_E.patch

OBS-URL: https://build.opensuse.org/request/show/236618
OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=662
2014-06-09 08:41:53 +00:00

30 lines
1.3 KiB
Diff

From 02ba8fb3357daf57f6120ac512fb464a4c623419 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay@vrfy.org>
Date: Wed, 4 Jun 2014 16:21:19 +0200
Subject: [PATCH] udev: guard REREADPT by exclusive lock instead of O_EXCL
Signed-off-by: Robert Milasan <rmilasan@suse.com>
---
src/udev/udevd.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
Index: systemd-210/src/udev/udevd.c
===================================================================
--- systemd-210.orig/src/udev/udevd.c
+++ systemd-210/src/udev/udevd.c
@@ -758,9 +758,12 @@ static int synthesize_change(struct udev
* partition table is found, and we will not get an event for
* the disk.
*/
- fd = open(udev_device_get_devnode(dev), O_RDONLY|O_EXCL|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK);
+ fd = open(udev_device_get_devnode(dev), O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK);
if (fd >= 0) {
- r = ioctl(fd, BLKRRPART, 0);
+ r = flock(fd, LOCK_EX|LOCK_NB);
+ if (r >= 0)
+ r = ioctl(fd, BLKRRPART, 0);
+
close(fd);
if (r >= 0)
part_table_read = true;