]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
lockfile-util: Drop flock() fallback
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 9 Mar 2023 10:44:13 +0000 (11:44 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Fri, 10 Mar 2023 09:14:41 +0000 (10:14 +0100)
UNPOSIX locks were added in 3.15 which is now our minimal kernel
version, so let's drop the fallback.

src/shared/lockfile-util.c

index df099d7d05e33ccb38184dc051163527c88f2206..dd07ea0cabdc3909ac9c02918e8f99cf8069ec30 100644 (file)
 int make_lock_file(const char *p, int operation, LockFile *ret) {
         _cleanup_close_ int fd = -EBADF;
         _cleanup_free_ char *t = NULL;
-        int r;
 
         assert(p);
         assert(ret);
 
-        /*
-         * We use UNPOSIX locks if they are available. They have nice semantics, and are mostly compatible
-         * with NFS. However, they are only available on new kernels. When we detect we are running on an
-         * older kernel, then we fall back to good old BSD locks. They also have nice semantics, but are
-         * slightly problematic on NFS, where they are upgraded to POSIX locks, even though locally they are
-         * orthogonal to POSIX locks.
-         */
+        /* We use UNPOSIX locks as they have nice semantics, and are mostly compatible with NFS. */
 
         t = strdup(p);
         if (!t)
@@ -46,14 +39,8 @@ int make_lock_file(const char *p, int operation, LockFile *ret) {
                 if (fd < 0)
                         return -errno;
 
-                r = fcntl(fd, (operation & LOCK_NB) ? F_OFD_SETLK : F_OFD_SETLKW, &fl);
-                if (r < 0) {
-                        /* If the kernel is too old, use good old BSD locks */
-                        if (errno == EINVAL || ERRNO_IS_NOT_SUPPORTED(errno))
-                                r = flock(fd, operation);
-                        if (r < 0)
-                                return errno == EAGAIN ? -EBUSY : -errno;
-                }
+                if (fcntl(fd, (operation & LOCK_NB) ? F_OFD_SETLK : F_OFD_SETLKW, &fl) < 0)
+                        return errno == EAGAIN ? -EBUSY : -errno;
 
                 /* If we acquired the lock, let's check if the file still exists in the file system. If not,
                  * then the previous exclusive owner removed it and then closed it. In such a case our
@@ -73,7 +60,7 @@ int make_lock_file(const char *p, int operation, LockFile *ret) {
                 .operation = operation,
         };
 
-        return r;
+        return 0;
 }
 
 int make_lock_file_for(const char *p, int operation, LockFile *ret) {
@@ -99,8 +86,6 @@ int make_lock_file_for(const char *p, int operation, LockFile *ret) {
 }
 
 void release_lock_file(LockFile *f) {
-        int r;
-
         if (!f)
                 return;
 
@@ -117,11 +102,7 @@ void release_lock_file(LockFile *f) {
                                 .l_whence = SEEK_SET,
                         };
 
-                        r = fcntl(f->fd, F_OFD_SETLK, &fl);
-                        if (r < 0 && (errno == EINVAL || ERRNO_IS_NOT_SUPPORTED(errno)))
-                                r = flock(f->fd, LOCK_EX|LOCK_NB);
-
-                        if (r >= 0)
+                        if (fcntl(f->fd, F_OFD_SETLK, &fl) >= 0)
                                 f->operation = LOCK_EX|LOCK_NB;
                 }