2005-04-17 06:20:36 +08:00
|
|
|
#ifndef __COW_H__
|
|
|
|
#define __COW_H__
|
|
|
|
|
|
|
|
#include <asm/types.h>
|
|
|
|
|
[PATCH] uml: restore include breakage, breaking binary format of COW driver
Commit 44456d37b59d8e541936ed26d8b6e08d27e88ac1, between 2.6.13-rc3 and -rc4,
was a "nice cleanup" which broke something. Revert the offending part.
It broke because:
a) because this part doesn't fall under the description
b) the author didn't know what he was doing here
c) the author didn't try to compile the existing code and see that it worked
perfectly.
d) the author didn't ask us what was happening
e) you didn't either, and somebody there should have learned that UML is a bit
different.
In fact, UML is special in linking to host libc and using its includes.
In particular, since host includes always define both __BIG_ENDIAN and
__LITTLE_ENDIAN, ntohll() macros started thinking to be in a big-endian world;
and on-disk compatibility was broken.
Many thanks go to Nix for reporting the problem and correctly diagnosing an
endianness problem.
Btw, this patch restores the previous code, which worked; but the definitions
would be uncorrect if used in kernelspace files.
Next patch addresses that.
Cc: Nix <nix@esperi.org.uk>, Olaf Hering <olh@suse.de>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-10-10 03:37:35 +08:00
|
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
2005-04-17 06:20:36 +08:00
|
|
|
# define ntohll(x) (x)
|
|
|
|
# define htonll(x) (x)
|
[PATCH] uml: restore include breakage, breaking binary format of COW driver
Commit 44456d37b59d8e541936ed26d8b6e08d27e88ac1, between 2.6.13-rc3 and -rc4,
was a "nice cleanup" which broke something. Revert the offending part.
It broke because:
a) because this part doesn't fall under the description
b) the author didn't know what he was doing here
c) the author didn't try to compile the existing code and see that it worked
perfectly.
d) the author didn't ask us what was happening
e) you didn't either, and somebody there should have learned that UML is a bit
different.
In fact, UML is special in linking to host libc and using its includes.
In particular, since host includes always define both __BIG_ENDIAN and
__LITTLE_ENDIAN, ntohll() macros started thinking to be in a big-endian world;
and on-disk compatibility was broken.
Many thanks go to Nix for reporting the problem and correctly diagnosing an
endianness problem.
Btw, this patch restores the previous code, which worked; but the definitions
would be uncorrect if used in kernelspace files.
Next patch addresses that.
Cc: Nix <nix@esperi.org.uk>, Olaf Hering <olh@suse.de>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-10-10 03:37:35 +08:00
|
|
|
#elif __BYTE_ORDER == __LITTLE_ENDIAN
|
2005-04-17 06:20:36 +08:00
|
|
|
# define ntohll(x) bswap_64(x)
|
|
|
|
# define htonll(x) bswap_64(x)
|
|
|
|
#else
|
|
|
|
#error "__BYTE_ORDER not defined"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
extern int init_cow_file(int fd, char *cow_file, char *backing_file,
|
|
|
|
int sectorsize, int alignment, int *bitmap_offset_out,
|
|
|
|
unsigned long *bitmap_len_out, int *data_offset_out);
|
|
|
|
|
|
|
|
extern int file_reader(__u64 offset, char *buf, int len, void *arg);
|
|
|
|
extern int read_cow_header(int (*reader)(__u64, char *, int, void *),
|
|
|
|
void *arg, __u32 *version_out,
|
|
|
|
char **backing_file_out, time_t *mtime_out,
|
|
|
|
unsigned long long *size_out, int *sectorsize_out,
|
|
|
|
__u32 *align_out, int *bitmap_offset_out);
|
|
|
|
|
|
|
|
extern int write_cow_header(char *cow_file, int fd, char *backing_file,
|
|
|
|
int sectorsize, int alignment,
|
|
|
|
unsigned long long *size);
|
|
|
|
|
|
|
|
extern void cow_sizes(int version, __u64 size, int sectorsize, int align,
|
|
|
|
int bitmap_offset, unsigned long *bitmap_len_out,
|
|
|
|
int *data_offset_out);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
|
|
|
* ---------------------------------------------------------------------------
|
|
|
|
* Local variables:
|
|
|
|
* c-file-style: "linux"
|
|
|
|
* End:
|
|
|
|
*/
|