Bug 1461231 - [RFE] Support OFD locking constants, but disable them for 32-bit offsets (not following upstream) (glibc)
[RFE] Support OFD locking constants, but disable them for 32-bit offsets (not...
Status: ON_QA
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: glibc (Show other bugs)
7.4
Unspecified Unspecified
unspecified Severity unspecified
: rc
: ---
Assigned To: DJ Delorie
qe-baseos-tools
: FutureFeature, Patch
Depends On: 1444778
Blocks: 1515811 1565233 1378241
  Show dependency treegraph
 
Reported: 2017-06-13 21:28 EDT by Ademar Reis
Modified: 2018-06-11 21:16 EDT (History)
17 users (show)

See Also:
Fixed In Version: glibc-2.17-239.el7
Doc Type: Enhancement
Doc Text:
Feature: Add Open File Descriptor (OFD) Locking constants for 64-bit-offset programs. Reason: OFD locks are superior to per-process locks for some applications. Result: 64-bit-offset programs[*] will be able to use the F_OFD_* constants in system calls, although they'll still need to detect if the kernel supports those operations. Programs which use 32-bit file offsets will not have access to these constants, as the RHEL 7 ABI does not support translating them. [*] Those that #define _FILE_OFFSET_BITS 64
Story Points: ---
Clone Of: 1444778
Environment:
Last Closed:
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)


External Trackers
Tracker ID Priority Status Summary Last Updated
Sourceware 20251 None None None 2018-04-03 08:12 EDT

  None (edit)
Description Ademar Reis 2017-06-13 21:28:10 EDT
+++ This bug was initially created as a clone of Bug #1444778 +++

F_OFD_* locking API is superior to posix locks and flock(1), we need it in RHEL to support applications doing proper file locking.

The problem with posix locks are described in

https://lwn.net/Articles/586904/

The disadvantage with flock(1) is it doesn't reliably work in certain cases like NFS (where it is translated to posix locks).

As a concrete requirement, QEMU wants to use OFD locks to protect image files it opens, so that no concurrent writtings from different processes can happen, which would corrupt a qcow2 image, as an example.

--- Additional comment from Jeff Layton on 2017-04-24 18:48:27 BRT ---

It's certainly doable to add it, and I don't think it'd be problematic for kABI. 

Note that we'd also need to coordinate this with the companion glibc patches as well.

--- Additional comment from Eric Sandeen on 2017-04-24 18:55:13 BRT ---

I'm not sure that glibc can add new syscalls to a RHEL release w/o ABI problems - we ran into that back in the fallocate days ...

--- Additional comment from Jeff Layton on 2017-04-24 19:01:52 BRT ---

We don't need a new syscall here. It's just a matter of adding the F_OFD_* constants to the headers (and updating the docs if we care about that). If the kernel doesn't recognize the F_OFD_* commands, then it will just return -EINVAL.

QEMU or whatever will need to be able to detect that as well.
Comment 1 Carlos O'Donell 2017-06-15 00:49:33 EDT
We are currently in the practice of adding new constants to header files to enable kernel functionality, and this is just such a request, so we shouldn't have any real problem adding this to rhel-7.5.

The upstream commit is here:

commit 0961f7e1e300ef633b0c1ad95d0999fb5c169f4e
Author: Jeff Layton <jlayton@poochiereds.net>
Date:   Wed Jul 23 14:21:05 2014 -0400

    fcntl-linux.h: add new definitions and manual updates for open file description locks
    
    Open file description locks have been merged into the Linux kernel for
    v3.15.  Add the appropriate command-value definitions and an update to
    the manual that describes their usage.
Comment 8 Florian Weimer 2018-04-03 08:12:50 EDT
One concern is that the upstream API for this is still somewhat inconsistent (see swbz#20251).  On the other hand, what is currently upstream is probably better than no support at all.
Comment 9 Jeff Layton 2018-04-03 08:37:21 EDT
Interesting, I hadn't seen that swbz before. That's something that we should fix upstream. The original idea was to make these unavailable without large file offsets, IIRC.

I'm fine with making such programs fail to compile. Maybe the F_OFD_* constants should be inside a #ifdef __USE_LARGEFILE64 condition?

Note You need to log in before you can comment on or make changes to this bug.