[SCSI] scsi_dh: fix kconfig related build errors
Do not automatically "select" SCSI_DH for dm-multipath. If SCSI_DH doesn't exist,just do not allow hardware handlers to be used. Handle SCSI_DH being a module also. Make sure it doesn't allow DM_MULTIPATH to be compiled in when SCSI_DH is a module. [jejb: added comment for Kconfig syntax] Signed-off-by: Chandra Seetharaman <sekharan@us.ibm.com> Reported-by: Randy Dunlap <randy.dunlap@oracle.com> Reported-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
committed by
James Bottomley
parent
d7f305e9a0
commit
fe9233fb69
@@ -252,7 +252,11 @@ config DM_ZERO
|
|||||||
config DM_MULTIPATH
|
config DM_MULTIPATH
|
||||||
tristate "Multipath target"
|
tristate "Multipath target"
|
||||||
depends on BLK_DEV_DM
|
depends on BLK_DEV_DM
|
||||||
select SCSI_DH
|
# nasty syntax but means make DM_MULTIPATH independent
|
||||||
|
# of SCSI_DH if the latter isn't defined but if
|
||||||
|
# it is, DM_MULTIPATH must depend on it. We get a build
|
||||||
|
# error if SCSI_DH=m and DM_MULTIPATH=y
|
||||||
|
depends on SCSI_DH || !SCSI_DH
|
||||||
---help---
|
---help---
|
||||||
Allow volume managers to support multipath hardware.
|
Allow volume managers to support multipath hardware.
|
||||||
|
|
||||||
|
@@ -664,6 +664,8 @@ static int parse_hw_handler(struct arg_set *as, struct multipath *m)
|
|||||||
request_module("scsi_dh_%s", m->hw_handler_name);
|
request_module("scsi_dh_%s", m->hw_handler_name);
|
||||||
if (scsi_dh_handler_exist(m->hw_handler_name) == 0) {
|
if (scsi_dh_handler_exist(m->hw_handler_name) == 0) {
|
||||||
ti->error = "unknown hardware handler type";
|
ti->error = "unknown hardware handler type";
|
||||||
|
kfree(m->hw_handler_name);
|
||||||
|
m->hw_handler_name = NULL;
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
consume(as, hw_argc - 1);
|
consume(as, hw_argc - 1);
|
||||||
|
@@ -54,6 +54,16 @@ enum {
|
|||||||
SCSI_DH_NOSYS,
|
SCSI_DH_NOSYS,
|
||||||
SCSI_DH_DRIVER_MAX,
|
SCSI_DH_DRIVER_MAX,
|
||||||
};
|
};
|
||||||
|
#if defined(CONFIG_SCSI_DH) || defined(CONFIG_SCSI_DH_MODULE)
|
||||||
extern int scsi_dh_activate(struct request_queue *);
|
extern int scsi_dh_activate(struct request_queue *);
|
||||||
extern int scsi_dh_handler_exist(const char *);
|
extern int scsi_dh_handler_exist(const char *);
|
||||||
|
#else
|
||||||
|
static inline int scsi_dh_activate(struct request_queue *req)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static inline int scsi_dh_handler_exist(const char *name)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Reference in New Issue
Block a user