From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nathan March Subject: Block script unsafe when starting multiple devices in parallel Date: Tue, 30 Aug 2011 10:37:14 -0700 Message-ID: <4E5D1FCA.7010104@gt.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070507070006060507050201" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------070507070006060507050201 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Hi Guys, Ran into an issue where losetup was failing, added some logging to it's executions to see (first #'s are parent pid / pid): 32435 / 32438 - losetup -f 32436 / 32439 - losetup -f 32435 / 32438 - Exit code: 0 32435 / 32438 - Output: /dev/loop/10 32436 / 32439 - Exit code: 0 32436 / 32439 - Output: /dev/loop/10 32128 / 32451 - losetup /dev/loop/10 /mnt/xenDisks2/nathanxen2/backup_tmp 31934 / 32452 - losetup /dev/loop/10 /mnt/xenDisks1/nathanxen2/swap Sometime's losetup seems to be stuck waiting on something else and since multiple block devices are brought up in parallel, the block script tries to use the same name for multiple loopback devices. Fix for this is pretty straightforward - should just be letting losetup figure out the device names itself, patch is attached. - Nathan -- Nathan March Gossamer Threads Inc. http://www.gossamer-threads.com/ Tel: (604) 687-5804 Fax: (604) 687-5806 --------------070507070006060507050201 Content-Type: text/plain; name="block.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="block.patch" --- block.orig 2011-08-30 10:17:05.663106731 -0700 +++ block 2011-08-30 10:18:49.742946473 -0700 @@ -292,12 +292,12 @@ done fi - loopdev=$(losetup -f 2>/dev/null || find_free_loopback_dev) - if [ "$loopdev" = '' ] - then - release_lock "block" - fatal 'Failed to find an unused loop device' - fi + #loopdev=$(losetup -f 2>/dev/null || find_free_loopback_dev) + #if [ "$loopdev" = '' ] + #then + # release_lock "block" + # fatal 'Failed to find an unused loop device' + #fi if LANG=C losetup -h 2>&1 | grep read-only >/dev/null then @@ -305,7 +305,12 @@ else roflag='' fi - do_or_die losetup $roflag "$loopdev" "$file" + + loopdev=$(losetup -f "$file" --show) + if [[ $? -ne 0 ]]; then + fatal "Unable to bring up $file - $loopdev" + fi; + #do_or_die losetup $roflag "$loopdev" "$file" xenstore_write "$XENBUS_PATH/node" "$loopdev" write_dev "$loopdev" release_lock "block" --------------070507070006060507050201 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------070507070006060507050201--