libfsimage: portability fixes
PATCH 1/1 libfsimage: portability fixes
Hi Keir!
Attached patch improves portability and adds fixes for NetBSD to libfsimage.
Signature · 12 lines
AMD Saxony, Dresden, Germany Operating System Research Center Legal Information: AMD Saxony Limited Liability Company & Co. KG Sitz (Geschäftsanschrift): Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland Registergericht Dresden: HRA 4896 vertretungsberechtigter Komplementär: AMD Saxony LLC (Sitz Wilmington, Delaware, USA) Geschäftsführer der AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy
tools/libfsimage/Makefile +1 -1
@@ -2,7 +2,7 @@ include $(XEN_ROOT)/tools/Rules.mk include $(XEN_ROOT)/tools/Rules.mk SUBDIRS-y = common ufs reiserfs iso9660 fat -SUBDIRS-y += $(shell env CC="$(CC)" ./check-libext2fs) +SUBDIRS-y += $(shell $(SHELL) env CC="$(CC)" ./check-libext2fs) .PHONY: all clean install all clean install: %: subdirs-%
tools/libfsimage/Rules.mk +1 -0
@@ -11,6 +11,7 @@ FSDIR-$(CONFIG_SunOS)-x86_64 = $(PREFIX) FSDIR-$(CONFIG_SunOS)-x86_64 = $(PREFIX)/lib/fs/$(FS)/64 FSDIR-$(CONFIG_SunOS)-x86_32 = $(PREFIX)/lib/fs/$(FS)/ FSDIR-$(CONFIG_SunOS) = $(FSDIR-$(CONFIG_SunOS)-$(XEN_TARGET_ARCH)) +FSDIR-$(CONFIG_NetBSD) = $(LIBDIR)/fs/$(FS) FSDIR = $(FSDIR-y) FSLIB = fsimage.so
tools/libfsimage/check-libext2fs +4 -2
@@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh cat >ext2-test.c <<EOF #include <ext2fs/ext2fs.h>
@@ -9,7 +9,9 @@ int main() } EOF -${CC:-gcc} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1 +if test -z ${CC}; then CC="gcc"; fi +${CC} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1 + if [ $? = 0 ]; then echo ext2fs-lib else
tools/libfsimage/common/fsimage_grub.c +38 -10
57 lines not on this page · raw message
tools/libfsimage/common/fsimage_grub.h +1 -1
@@ -44,7 +44,7 @@ typedef struct fsig_plugin_ops { } fsig_plugin_ops_t;#define STAGE1_5 -#define FSYS_BUFLEN 0x8000 +#define FSYS_BUFLEN 0x40000#define SECTOR_BITS 9#define SECTOR_SIZE 0x200
tools/libfsimage/common/fsimage_plugin.c +4 -1
@@ -131,7 +131,10 @@ static int load_plugins(void)int err;int ret =-1 ; -#ifdef __sun__ +#if defined(FSIMAGE_FSDIR ) +if (fsdir ==NULL ) + fsdir =FSIMAGE_FSDIR ; +#elif defined(__sun__)if (fsdir ==NULL ) fsdir ="/usr/lib/fs" ;
_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel
Christoph Egger writes ("[Xen-devel] [PATCH][TOOLS] libfsimage: portability fixes"):
tools/libfsimage/Makefile include $(XEN_ROOT)/tools/Rules.mk · line 5
Quoted 2 lines
tools/libfsimage/Makefile +1
-1-SUBDIRS-y += $(shell env CC="$(CC)" ./check-libext2fs) +SUBDIRS-y += $(shell $(SHELL) env CC="$(CC)" ./check-libext2fs)
What purpose does this serve ?
tools/libfsimage/common/fsimage_grub.c fsig_devread(fsi_file_t *ffi, unsigned i · line 218
Quoted 5 lines
tools/libfsimage/common/fsimage_grub.c +5
-0+/* +* Make reads from a raw disk sector-aligned. This is a requirement +* for NetBSD. Split the read up into to three parts to meet this +* requirement. +*/
Please forgive my ignorance: Does NetBSD offer a different (non-raw) device which does not have this requirement. If so perhaps we should be using it instead - if not, why not ?
Ian.
Quoted 1 line · On Thursday 27 March 2008 11:54:41 Ian Jackson wrote:
Christoph Egger writes ("[Xen-devel] [PATCH][TOOLS] libfsimage: portability
fixes"):
Quoted 4 lines
tools/libfsimage/Makefile include $(XEN_ROOT)/tools/Rules.mk · line 5
Quoted 2 lines
tools/libfsimage/Makefile +1
-1-SUBDIRS-y += $(shell env CC="$(CC)" ./check-libext2fs) +SUBDIRS-y += $(shell $(SHELL) env CC="$(CC)" ./check-libext2fs)What purpose does this serve ?
Everytime when I submitted a patch where I changed /bin/bash to /bin/sh John Levon came up with a "Build is broken on Solaris" message. The fix was always the same: Use $(SHELL) as this is explicitely set for Solaris.
Quoted 9 lines
tools/libfsimage/common/fsimage_grub.c fsig_devread(fsi_file_t *ffi, unsigned i · line 218
Quoted 5 lines
tools/libfsimage/common/fsimage_grub.c +5
-0+/* +* Make reads from a raw disk sector-aligned. This is a requirement +* for NetBSD. Split the read up into to three parts to meet this +* requirement. +*/ Please forgive my ignorance: Does NetBSD offer a different (non-raw) device which does not have this requirement. If so perhaps we should be using it instead - if not, why not ?
The raw device pass requests directly to the underlying device, with only check/adjustments against the partition bounds. Especially it won't try to do read/modify/write for write requests, or expand the read if it's not sector-aligned.
The block device doesn't have this restriction, but allows only ONE open, therefore it is not usable by pygrub. It also has other side-effects (as it goes through the buffer cache), it's definitively not useable for the
NetBSD block device *backend* or for qemu-dm I/O.
Christoph
Signature · 12 lines
AMD Saxony, Dresden, Germany Operating System Research Center Legal Information: AMD Saxony Limited Liability Company & Co. KG Sitz (Geschäftsanschrift): Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland Registergericht Dresden: HRA 4896 vertretungsberechtigter Komplementär: AMD Saxony LLC (Sitz Wilmington, Delaware, USA) Geschäftsführer der AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy
Christoph Egger writes ("Re: [Xen-devel] [PATCH][TOOLS] libfsimage: portability fixes"):
Quoted 4 lines
Everytime when I submitted a patch where I changed
/bin/bashto/bin/shJohn Levon came up with a "Build is broken on Solaris" message. The fix was always the same: Use $(SHELL) as this is explicitely set for Solaris.
People whose /bin/sh is that badly broken deserve to lose IMO - that is to say, we shouldn't inconvenience other people for their benefit. We've had this conversation before.
But in any case your syntax was completely wrong and the script has #!/bin/sh at the top already so I don't see why this is relevant to you.
Quoted 10 lines · On Thursday 27 March 2008 11:54:41 Ian Jackson wrote:
Quoted 4 lines
Christoph Egger writes ("[Xen-devel] [PATCH][TOOLS] libfsimage: portability Please forgive my ignorance: Does NetBSD offer a different (non-raw) device which does not have this requirement. If so perhaps we should be using it instead - if not, why not ?
The raw device pass requests directly to the underlying device, with only check/adjustments against the partition bounds. Especially it won't try to do read/modify/write for write requests, or expand the read if it's not sector-aligned.
Yes, but these aren't desirable in this case.
Quoted 4 lines
The block device doesn't have this restriction, but allows only ONE open, therefore it is not usable by pygrub. It also has other side-effects (as it goes through the buffer cache), it's definitively not useable for the
NetBSD block device *backend* or for qemu-dm I/O.
The problem is that pygrub wants to open the disk multiple times ? Or is it that xend has already plumbed in the device to qemu-dm or what have you, and that prevents a second open ?
There doesn't seem to me to be any problem with pygrub's accesses going through the buffer cache.
I accept that it's not suitable for use as the full block backend, but perhaps the answer is to pass pygrub an edited version of the device name, or have pygrub edit it itself. If we were to use the non-raw device for pygrub and the raw device for qemu-dm, would things work ?
Ian.
Quoted 7 lines · Ian Jackson
Christoph Egger writes ("Re: [Xen-devel] [PATCH][TOOLS] libfsimage: portability fixes"):
Quoted 4 lines
Everytime when I submitted a patch where I changed
/bin/bashto/bin/shJohn Levon came up with a "Build is broken on Solaris" message. The fix was always the same: Use $(SHELL) as this is explicitely set for Solaris.People whose
/bin/shis that badly broken deserve to lose IMO - that
Putting it mildly, I don't think that disabling an important platform because you have a bee in your bonnet about $(SHELL) is a sensible implementation choice.
john
Quoted 1 line · On Thursday 27 March 2008 16:36:45 Ian Jackson wrote:
Christoph Egger writes ("Re: [Xen-devel] [PATCH][TOOLS] libfsimage:
portability fixes"):
Quoted 26 lines
Quoted 4 lines
Everytime when I submitted a patch where I changed
/bin/bashto/bin/shJohn Levon came up with a "Build is broken on Solaris" message. The fix was always the same: Use $(SHELL) as this is explicitely set for Solaris.People whose
/bin/shis that badly broken deserve to lose IMO - that is to say, we shouldn't inconvenience other people for their benefit. We've had this conversation before.But in any case your syntax was completely wrong and the script has #!/bin/sh at the top already so I don't see why this is relevant to you.
Quoted 10 lines · On Thursday 27 March 2008 11:54:41 Ian Jackson wrote:
Quoted 4 lines
Christoph Egger writes ("[Xen-devel] [PATCH][TOOLS] libfsimage:
portability Please forgive my ignorance: Does NetBSD offer a different (non-raw) device which does not have this requirement. If so perhaps we should be using it instead - if not, why not ?The raw device pass requests directly to the underlying device, with only check/adjustments against the partition bounds. Especially it won't try to do read/modify/write for write requests, or expand the read if it's not sector-aligned.
Yes, but these aren't desirable in this case.
Quoted 8 lines
Quoted 4 lines
The block device doesn't have this restriction, but allows only ONE open, therefore it is not usable by pygrub. It also has other side-effects (as it goes through the buffer cache), it's definitively not useable for
the NetBSD block device *backend* or for qemu-dm I/O.The problem is that pygrub wants to open the disk multiple times ? Or is it that xend has already plumbed in the device to qemu-dm or what have you, and that prevents a second open ?
The block backend opens the block device before pygrub is started. So, when you have "disk = [ 'phy:/dev/bla,blub,w' ]" in your setup you get an EBUSY when pygrub tries to open the block device.
Quoted 4 lines
I accept that it's not suitable for use as the full block backend, but perhaps the answer is to pass pygrub an edited version of the device name, or have pygrub edit it itself. If we were to use the non-raw device for pygrub and the raw device for qemu-dm, would things work ?
I don't think it would work without a lot of work on the backend device, if it is possible at all. For now, the backend assumes it was given a block device.
Christoph
Signature · 12 lines
AMD Saxony, Dresden, Germany Operating System Research Center Legal Information: AMD Saxony Limited Liability Company & Co. KG Sitz (Geschäftsanschrift): Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland Registergericht Dresden: HRA 4896 vertretungsberechtigter Komplementär: AMD Saxony LLC (Sitz Wilmington, Delaware, USA) Geschäftsführer der AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy
Christoph Egger writes ("Re: [Xen-devel] [PATCH][TOOLS] libfsimage: portability fixes"):
Quoted 9 lines · On Thursday 27 March 2008 16:36:45 Ian Jackson wrote:
Quoted 4 lines
I accept that it's not suitable for use as the full block backend, but perhaps the answer is to pass pygrub an edited version of the device name, or have pygrub edit it itself. If we were to use the non-raw device for pygrub and the raw device for qemu-dm, would things work ?
I don't think it would work without a lot of work on the backend device, if it is possible at all. For now, the backend assumes it was given a block device.
I'm afraid I don't follow this at all. (What does `block device' stand in opposition to?)
Is it possible for pygrub to open the non-raw device while the block backend is using the raw device ? Or do you mean that the block backend is already using the non-raw device and that you're having pygrub use the raw device just so that you are able to use the same underlying storage object twice simultaneously ?
Ian.
Quoted 1 line · On Friday 28 March 2008 11:42:15 Ian Jackson wrote:
Christoph Egger writes ("Re: [Xen-devel] [PATCH][TOOLS] libfsimage:
portability fixes"):
Quoted 6 lines
Quoted 6 lines · On Thursday 27 March 2008 16:36:45 Ian Jackson wrote:
Quoted 4 lines
I accept that it's not suitable for use as the full block backend, but perhaps the answer is to pass pygrub an edited version of the device name, or have pygrub edit it itself. If we were to use the non-raw device for pygrub and the raw device for qemu-dm, would things work ?
Quoted 6 lines
Quoted 3 lines
I don't think it would work without a lot of work on the backend device, if it is possible at all. For now, the backend assumes it was given a block device.
I'm afraid I don't follow this at all. (What does `block device' stand in opposition to?)
"block device" is what is given in the guest setup with "disk = [ 'phy:/dev/wd0a,0x1,w' ]" (NetBSD syntax) "disk = [ 'phy:/dev/hda1,hda,w' ]" (Linux syntax)
Quoted 5 lines
Is it possible for pygrub to open the non-raw device while the block backend is using the raw device ? Or do you mean that the block backend is already using the non-raw device and that you're having pygrub use the raw device just so that you are able to use the same underlying storage object twice simultaneously ?
With changeset 17300, pygrub uses a raw device on NetBSD only. The block backend already opened the block device when pygrub opens the raw device.
Christoph
Signature · 12 lines
AMD Saxony, Dresden, Germany Operating System Research Center Legal Information: AMD Saxony Limited Liability Company & Co. KG Sitz (Geschäftsanschrift): Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland Registergericht Dresden: HRA 4896 vertretungsberechtigter Komplementär: AMD Saxony LLC (Sitz Wilmington, Delaware, USA) Geschäftsführer der AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy
Christoph Egger writes ("Re: [Xen-devel] [PATCH][TOOLS] libfsimage: portability fixes"):
Quoted 13 lines · On Friday 28 March 2008 11:42:15 Ian Jackson wrote:
Quoted 1 line
Christoph Egger writes ("Re: [Xen-devel] [PATCH][TOOLS] libfsimage:
portability fixes"):
Quoted 10 lines
Quoted 9 lines · On Thursday 27 March 2008 16:36:45 Ian Jackson wrote:
Quoted 4 lines
I accept that it's not suitable for use as the full block backend, but perhaps the answer is to pass pygrub an edited version of the device name, or have pygrub edit it itself. If we were to use the non-raw device for pygrub and the raw device for qemu-dm, would things work ?
I don't think it would work without a lot of work on the backend device, if it is possible at all. For now, the backend assumes it was given a block device.
Quoted 6 lines
Quoted 2 lines
I'm afraid I don't follow this at all. (What does `block device' stand in opposition to?)
"block device" is what is given in the guest setup with "disk = [ 'phy:/dev/wd0a,0x1,w' ]" (NetBSD syntax) "disk = [ 'phy:/dev/hda1,hda,w' ]" (Linux syntax)
Yes, I know that. But you say `the backend assumes it was given a block device' and I was suggesting giving it the raw block device so obviously we are talking at cross purposes.
Do you mean that it would somehow be difficult for the block backend to talk to /dev/rwd0a instead ? Surely that would be more appropriate in any case.
Quoted 9 lines
Quoted 5 lines
Is it possible for pygrub to open the non-raw device while the block backend is using the raw device ? Or do you mean that the block backend is already using the non-raw device and that you're having pygrub use the raw device just so that you are able to use the same underlying storage object twice simultaneously ?
With changeset 17300, pygrub uses a raw device on NetBSD only. The block backend already opened the block device when pygrub opens the raw device.
Yes, so you said already. But you haven't answered my question.
Ian.
Christoph Egger writes ("[Xen-devel] [PATCH][TOOLS] libfsimage: portability fixes"):
tools/libfsimage/check-libext2fs int main() · line 14
Quoted 4 lines
-${CC:-gcc} -o ext2-test
ext2-test.c-lext2fs >/dev/null 2>&1tools/libfsimage/check-libext2fs +3
-0+if test -z ${CC}; then CC="gcc"; fi +${CC} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1 +
This also seems to serve no purpose as far as I can tell.
Ian.
Quoted 1 line · On Thursday 27 March 2008 12:05:30 Ian Jackson wrote:
Christoph Egger writes ("[Xen-devel] [PATCH][TOOLS] libfsimage: portability
fixes"):
Quoted 6 lines
tools/libfsimage/check-libext2fs int main() · line 14
Quoted 4 lines
-${CC:-gcc} -o ext2-test
ext2-test.c-lext2fs >/dev/null 2>&1tools/libfsimage/check-libext2fs +3
-0+if test -z ${CC}; then CC="gcc"; fi +${CC} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1 +This also seems to serve no purpose as far as I can tell.
This is for the ancient Solaris /bin/sh. If John Levon confirms that this and that the $(SHELL) mentioned in your other mail
are NOT needed/required to not break Solaris, you can undo these two changes.
Christoph
Signature · 12 lines
AMD Saxony, Dresden, Germany Operating System Research Center Legal Information: AMD Saxony Limited Liability Company & Co. KG Sitz (Geschäftsanschrift): Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland Registergericht Dresden: HRA 4896 vertretungsberechtigter Komplementär: AMD Saxony LLC (Sitz Wilmington, Delaware, USA) Geschäftsführer der AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy
Quoted 10 lines · Christoph Egger
Quoted 1 line · On Thursday 27 March 2008 12:05:30 Ian Jackson wrote:
Christoph Egger writes ("[Xen-devel] [PATCH][TOOLS] libfsimage: portability
fixes"):
Quoted 6 lines
tools/libfsimage/check-libext2fs int main() · line 14
Quoted 4 lines
-${CC:-gcc} -o ext2-test
ext2-test.c-lext2fs >/dev/null 2>&1tools/libfsimage/check-libext2fs +3
-0+if test -z ${CC}; then CC="gcc"; fi +${CC} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1 +This also seems to serve no purpose as far as I can tell.
Quoted 3 lines
This is for the ancient Solaris
/bin/sh. If John Levon confirms that this and that the $(SHELL) mentioned in your other mail
are NOT needed/required to not break Solaris, you can undo these two changes.
It's not needed for the Bourne shell, no.
regards,
john
Christoph Egger wrote: [Wed Mar 26 2008, 10:14:33AM EDT]
tools/libfsimage/Makefile include $(XEN_ROOT)/tools/Rules.mk · line 5
Quoted 9 lines
diff -r
966c04d42e94tools/libfsimage/Makefiletools/libfsimage/Makefile +1
-1@@ -2,7 +2,7 @@ include $(XEN_ROOT)/tools/Rules.mk include $(XEN_ROOT)/tools/Rules.mk SUBDIRS-y = common ufs reiserfs iso9660 fat -SUBDIRS-y += $(shell env CC="$(CC)" ./check-libext2fs) +SUBDIRS-y += $(shell $(SHELL) env CC="$(CC)" ./check-libext2fs)
As Ian asked, what was this intended to do? It's certainly wrong:
$ /bin/sh env CC=gcc ./check-libext2fs /usr/bin/env: /usr/bin/env: cannot execute binary file
Quoted 10 lines
diff -r
966c04d42e94tools/libfsimage/check-libext2fstools/libfsimage/check-libext2fs +1
-1@@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh cat >ext2-test.c <<EOF #include <ext2fs/ext2fs.h>
tools/libfsimage/check-libext2fs int main() · line 17
Quoted 10 lines
tools/libfsimage/check-libext2fs +3
-1@@ -9,7 +9,9 @@ int main() } EOF -${CC:-gcc} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1 +if test -z ${CC}; then CC="gcc"; fi +${CC} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1 + if [ $? = 0 ]; then echo ext2fs-lib else
This prevents check-libext2fs from being run outside the Makefile. It will silently fail compilation if $CC isn't set. For Bourne shell and cross-platform compatibility, it should be:
${CC-cc} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1
Aron
Aron Griffis writes ("Re: [Xen-devel] [PATCH][TOOLS] libfsimage: portability fixes"):
Quoted 8 lines
Christoph Egger wrote: [Wed Mar 26 2008, 10:14:33AM EDT]
Quoted 3 lines
-${CC:-gcc} -o ext2-test
ext2-test.c-lext2fs >/dev/null 2>&1 +if test -z ${CC}; then CC="gcc"; fi
+${CC} -o ext2-testext2-test.c-lext2fs >/dev/null 2>&1This prevents check-libext2fs from being run outside the
Makefile. It will silently fail compilation if $CC isn't set. For Bourne shell and cross-platform compatibility, it should be:
${VARIABLE:-defaultvalue} is in SuSv3 (section 2.6.2, `Use Default Values') and has been in many previous standards. Any system whose /bin/sh can't cope is hopelessly broken.
Quoted 1 line
${CC-cc} -o ext2-test
ext2-test.c-lext2fs >/dev/null 2>&1
However, in this case, ${VARIABLE-defaultvalue} is an adequate substitute so we should use that. With a default of gcc, since without gcc you're doomed anyway.
Ian.
Ian Jackson wrote: [Thu Mar 27 2008, 11:13:41AM EDT]
Quoted 3 lines
${VARIABLE:-defaultvalue} is in SuSv3 (section 2.6.2, `Use Default Values') and has been in many previous standards. Any system whose
/bin/shcan't cope is hopelessly broken.
Ah, great.
Quoted 5 lines
Quoted 1 line
${CC-cc} -o ext2-test
ext2-test.c-lext2fs >/dev/null 2>&1However, in this case, ${VARIABLE-defaultvalue} is an adequate substitute so we should use that. With a default of gcc, since without gcc you're doomed anyway.
Okay, thanks.