diff options
author | Matthias Koenig | 2007-06-20 15:17:45 +0200 |
---|---|---|
committer | Karel Zak | 2007-06-27 14:55:00 +0200 |
commit | 95ba33f7a4ed199bc749264359a973a394ea09c4 (patch) | |
tree | 46712a4396e39dcdfdbf5d60ba99a0f5944b13d3 /mount/lomount.c | |
parent | sfdisk: setting default geometry values (diff) | |
download | kernel-qcow2-util-linux-95ba33f7a4ed199bc749264359a973a394ea09c4.tar.gz kernel-qcow2-util-linux-95ba33f7a4ed199bc749264359a973a394ea09c4.tar.xz kernel-qcow2-util-linux-95ba33f7a4ed199bc749264359a973a394ea09c4.zip |
mount: loop device race condition
Fix race in mount -o loop
Retry acquiring a loop device if the setup failed with EBUSY.
Signed-Off-By: Matthias Koenig <mkoenig@suse.de>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'mount/lomount.c')
-rw-r--r-- | mount/lomount.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/mount/lomount.c b/mount/lomount.c index 4774a8539..a5def9804 100644 --- a/mount/lomount.c +++ b/mount/lomount.c @@ -341,8 +341,16 @@ set_loop(const char *device, const char *file, unsigned long long offset, } if (ioctl(fd, LOOP_SET_FD, ffd) < 0) { - perror("ioctl: LOOP_SET_FD"); - return 1; + close(fd); + close(ffd); + if (errno == EBUSY) { + if (verbose) + printf(_("ioctl LOOP_SET_FD failed: %s\n"), strerror(errno)); + return 2; + } else { + perror("ioctl: LOOP_SET_FD"); + return 1; + } } close (ffd); |