summaryrefslogtreecommitdiffstats
path: root/sys/cam/scsi/scsi_targ_bh.c
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2007-05-16 16:54:23 +0000
committerscottl <scottl@FreeBSD.org>2007-05-16 16:54:23 +0000
commit74448961ec9a8ecb496066cacac4aee33258b2b0 (patch)
treeeb4208c40ec28ee618733168a87c1e69768e1c1a /sys/cam/scsi/scsi_targ_bh.c
parent04e8b672c852d872cc214c6745d7cddca1d5080c (diff)
downloadFreeBSD-src-74448961ec9a8ecb496066cacac4aee33258b2b0.zip
FreeBSD-src-74448961ec9a8ecb496066cacac4aee33258b2b0.tar.gz
Add a helper function for registering async callbacks. Besides
eliminating a lot of duplicated code, this also fixes a locking edge case.
Diffstat (limited to 'sys/cam/scsi/scsi_targ_bh.c')
-rw-r--r--sys/cam/scsi/scsi_targ_bh.c18
1 files changed, 2 insertions, 16 deletions
diff --git a/sys/cam/scsi/scsi_targ_bh.c b/sys/cam/scsi/scsi_targ_bh.c
index 984baf4..e8ec51f 100644
--- a/sys/cam/scsi/scsi_targ_bh.c
+++ b/sys/cam/scsi/scsi_targ_bh.c
@@ -156,27 +156,13 @@ static void
targbhinit(void)
{
cam_status status;
- struct cam_path *path;
/*
* Install a global async callback. This callback will
* receive async callbacks like "new path registered".
*/
- status = xpt_create_path(&path, /*periph*/NULL, CAM_XPT_PATH_ID,
- CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
-
- if (status == CAM_REQ_CMP) {
- struct ccb_setasync csa;
-
- xpt_setup_ccb(&csa.ccb_h, path, /*priority*/5);
- csa.ccb_h.func_code = XPT_SASYNC_CB;
- csa.event_enable = AC_PATH_REGISTERED | AC_PATH_DEREGISTERED;
- csa.callback = targbhasync;
- csa.callback_arg = NULL;
- xpt_action((union ccb *)&csa);
- status = csa.ccb_h.status;
- xpt_free_path(path);
- }
+ status = xpt_register_async(AC_PATH_REGISTERED | AC_PATH_DEREGISTERED,
+ targbhasync, NULL, NULL);
if (status != CAM_REQ_CMP) {
printf("targbh: Failed to attach master async callback "
OpenPOWER on IntegriCloud