From: Alan Somehow the sis_info133 external definition ended up in libata.h and that was included by both drivers. However libata.h contains libata-* specific internals and clashing defines like DRV_NAME so this makes a mess. Move the extern into the C file and remove the warnings [akpm@linux-foundation.org: create sis.h to avoid extern-decl-in-C] Signed-off-by: Alan Cox Cc: Jeff Garzik Signed-off-by: Andrew Morton --- drivers/ata/libata.h | 2 -- drivers/ata/pata_sis.c | 3 +-- drivers/ata/sata_sis.c | 3 +-- drivers/ata/sis.h | 5 +++++ 4 files changed, 7 insertions(+), 6 deletions(-) diff -puN drivers/ata/libata.h~sis-warning-fixes drivers/ata/libata.h --- a/drivers/ata/libata.h~sis-warning-fixes +++ a/drivers/ata/libata.h @@ -150,7 +150,5 @@ extern void ata_qc_schedule_eh(struct at /* libata-sff.c */ extern u8 ata_irq_on(struct ata_port *ap); -/* pata_sis.c */ -extern struct ata_port_info sis_info133; #endif /* __LIBATA_H__ */ diff -puN drivers/ata/pata_sis.c~sis-warning-fixes drivers/ata/pata_sis.c --- a/drivers/ata/pata_sis.c~sis-warning-fixes +++ a/drivers/ata/pata_sis.c @@ -32,9 +32,8 @@ #include #include #include -#include "libata.h" +#include "sis.h" -#undef DRV_NAME /* already defined in libata.h, for libata-core */ #define DRV_NAME "pata_sis" #define DRV_VERSION "0.4.5" diff -puN drivers/ata/sata_sis.c~sis-warning-fixes drivers/ata/sata_sis.c --- a/drivers/ata/sata_sis.c~sis-warning-fixes +++ a/drivers/ata/sata_sis.c @@ -40,9 +40,8 @@ #include #include #include -#include "libata.h" +#include "sis.h" -#undef DRV_NAME /* already defined in libata.h, for libata-core */ #define DRV_NAME "sata_sis" #define DRV_VERSION "0.7" diff -puN /dev/null drivers/ata/sis.h --- /dev/null +++ a/drivers/ata/sis.h @@ -0,0 +1,5 @@ + +struct ata_port_info; + +/* pata_sis.c */ +extern struct ata_port_info sis_info133; _