diff options
author | scottl <scottl@FreeBSD.org> | 2007-05-16 16:54:23 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2007-05-16 16:54:23 +0000 |
commit | 74448961ec9a8ecb496066cacac4aee33258b2b0 (patch) | |
tree | eb4208c40ec28ee618733168a87c1e69768e1c1a /sys/cam/scsi/scsi_targ_bh.c | |
parent | 04e8b672c852d872cc214c6745d7cddca1d5080c (diff) | |
download | FreeBSD-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.c | 18 |
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 " |