]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
blk/kernel: retry forever if bdev_flock_retry is 0 37842/head
authorKefu Chai <kchai@redhat.com>
Wed, 16 Sep 2020 01:28:04 +0000 (09:28 +0800)
committerNathan Cutler <ncutler@suse.com>
Tue, 27 Oct 2020 10:33:48 +0000 (11:33 +0100)
commit560b16c84a8572f8063e8f21038a997bbaa7ce4f
treeb40d6907e29d88c6c395e1d1e2f1b087c6310218
parenteb8c518b7a9464fcb0a0d448f0ea2e5896924af2
blk/kernel: retry forever if bdev_flock_retry is 0

retry forever if cct->_conf->bdev_flock_retry is 0.
systemd-udevd is most likely the reason why ceph-osd fails to
acquire the flock when "mkfs", because systemd-udevd probes
all block devices when the device changes in the system using
libblkid, and when systemd-udevd starts looking at the device
it takes a `LOCK_SH|LOCK_NB` lock. and it releases the lock
right after done with it. so normally, it only takes a jiffy,
see
https://github.com/systemd/systemd/blob/ee0b9e721a368742ac6fa9c3d9a33e45dc3203a2/src/shared/lockfile-util.c#L18
so, we just need to retry couple times before acquiring the
lock.

Fixes: https://tracker.ceph.com/issues/46124
Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit 743b5bda6559c9be0e64617aa43ef5e06a5a6e60)

Conflicts:
src/blk/kernel/KernelDevice.cc
- file does not exist in nautilus; made changes manually in
  src/os/bluestore/KernelDevice.cc
src/common/options.cc
src/os/bluestore/KernelDevice.cc