test/fs: error case fixes/enhancements

- Use "mkdir -p" to avoid errors when intermediate directories are
  missing.
- Fall back to "dd" when "fallocate" fails. For example, fallocate isn't
  supported on ext4.
- Add error checking for test image generation. Without this, the test
  simply plows on spewing all kinds of errors which are hard to
  immediately root-cause.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
diff --git a/test/fs/fs-test.sh b/test/fs/fs-test.sh
index fc41c04..043e5d0 100755
--- a/test/fs/fs-test.sh
+++ b/test/fs/fs-test.sh
@@ -100,7 +100,7 @@
 # We save time by not deleting and recreating the file system images
 function prepare_env() {
 	rm -f ${MD5_FILE}.* ${OUT}.*
-	mkdir ${OUT_DIR}
+	mkdir -p ${OUT_DIR}
 }
 
 # 1st parameter is the name of the image file to be created
@@ -115,11 +115,23 @@
 	fi
 	if [ ! -f "$1" ]; then
 		fallocate -l 3G "$1" &> /dev/null
+		if [ $? -ne 0 ]; then
+			echo fallocate failed - using dd instead
+			dd if=/dev/zero of=$1 bs=1024 count=$((3 * 1024 * 1024))
+			if [ $? -ne 0 ]; then
+				echo Could not create empty disk image
+				exit $?
+			fi
+		fi
 		mkfs -t "$2" $MKFS_OPTION "$1" &> /dev/null
 		if [ $? -ne 0 -a "$2" = "fat" ]; then
 			# If we fail and we did fat, try vfat.
 			mkfs -t vfat $MKFS_OPTION "$1" &> /dev/null
 		fi
+		if [ $? -ne 0 ]; then
+			echo Could not create filesystem
+			exit $?
+		fi
 	fi
 }