On Tue 30-07-19 13:17:28, Jens Axboe wrote: > On 7/30/19 7:36 AM, Jan Kara wrote: > > On Tue 30-07-19 12:16:46, Jan Kara wrote: > >> On Tue 30-07-19 10:36:59, John Lenton wrote: > >>> On Tue, 30 Jul 2019 at 10:29, Jan Kara <jack@xxxxxxx> wrote: > >>>> > >>>> Thanks for the notice and the references. What's your version of > >>>> util-linux? What your test script does is indeed racy. You have there: > >>>> > >>>> echo Running: > >>>> for i in {a..z}{a..z}; do > >>>> mount $i.squash /mnt/$i & > >>>> done > >>>> > >>>> So all mount(8) commands will run in parallel and race to setup loop > >>>> devices with LOOP_SET_FD and mount them. However util-linux (at least in > >>>> the current version) seems to handle EBUSY from LOOP_SET_FD just fine and > >>>> retries with the new loop device. So at this point I don't see why the patch > >>>> makes difference... I guess I'll need to reproduce and see what's going on > >>>> in detail. > >>> > >>> We've observed this in arch with util-linux 2.34, and ubuntu 19.10 > >>> (eoan ermine) with util-linux 2.33. > >>> > >>> just to be clear, the initial reports didn't involve a zany loop of > >>> mounts, but were triggered by effectively the same thing as systemd > >>> booted a system with a lot of snaps. The reroducer tries to makes > >>> things simpler to reproduce :-). FWIW, systemd versions were 244 and > >>> 242 for those systems, respectively. > >> > >> Thanks for info! So I think I see what's going on. The two mounts race > >> like: > >> > >> MOUNT1 MOUNT2 > >> num = ioctl(LOOP_CTL_GET_FREE) > >> num = ioctl(LOOP_CTL_GET_FREE) > >> ioctl("/dev/loop$num", LOOP_SET_FD, ..) > >> - returns OK > >> ioctl("/dev/loop$num", LOOP_SET_FD, ..) > >> - acquires exclusine loop$num > >> reference > >> mount("/dev/loop$num", ...) > >> - sees exclusive reference from MOUNT2 and fails > >> - sees loop device is already > >> bound and fails > >> > >> It is a bug in the scheme I've chosen that racing LOOP_SET_FD can block > >> perfectly valid mount. I'll think how to fix this... > > > > So how about attached patch? It fixes the regression for me. > > Jan, I've applied this patch - and also marked it for stable, so it'll > end up in 5.2-stable. Thanks. Thanks Jens! Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR