chiark / gitweb /
nspawn: add file system locks for controlling access to container images
authorLennart Poettering <lennart@poettering.net>
Wed, 14 Jan 2015 22:09:02 +0000 (23:09 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 14 Jan 2015 22:18:33 +0000 (23:18 +0100)
commit30535c16924a3da7b47ea87190d929d617d95c5a
treea2cd4f490a5a7d71350b31607a690aff42d1077d
parent805e5dda0a01c99d231824e1a9c4a208418bf342
nspawn: add file system locks for controlling access to container images

This adds three kinds of file system locks for container images:

a) a file system lock next to the actual image, in a .lck file in the
   same directory the image is located. This lock has the benefit of
   usually being located on the same NFS share as the image itself, and
   thus allows locking container images across NFS shares.

b) a file system lock in /run, named after st_dev and st_ino of the
   root of the image. This lock has the advantage that it is unique even
   if the same image is bind mounted to two different places at the same
   time, as the ino/dev stays constant for them.

c) a file system lock that is only taken when a new disk image is about
   to be created, that ensures that checking whether the name is already
   used across the search path, and actually placing the image is not
   interrupted by other code taking the name.

a + b are read-write locks. When a container is booted in read-only mode
a read lock is taken, otherwise a write lock.

Lock b is always taken after a, to avoid ABBA problems.

Lock c is mostly relevant when renaming or cloning images.
src/nspawn/nspawn.c
src/shared/machine-image.c
src/shared/machine-image.h
src/shared/util.c
src/shared/util.h