bfa: fix bfa_fcb_itnim_alloc() error handling
Subsystems (3)
The caller assumes that "itnim" is NULL on error and non-NULL on success but really "itnim" is uninitialized on error. This function should just use normal error handling where it returns zero on success and negative on failure.
Signed-off-by Dan Carpenter <[email protected]>
---
Static checker stuff. Not tested.
drivers/scsi/bfa/bfa_fcs.h +2 -2
@@ -873,8 +873,8 @@ bfa_status_t bfa_fcb_rport_alloc(struct bfad_s *bfad,/* * itnim callbacks */ -void bfa_fcb_itnim_alloc (struct bfad_s *bfad,struct bfa_fcs_itnim_s **itnim, -struct bfad_itnim_s **itnim_drv); +int bfa_fcb_itnim_alloc (struct bfad_s *bfad,struct bfa_fcs_itnim_s **itnim, +struct bfad_itnim_s **itnim_drv);void bfa_fcb_itnim_free (struct bfad_s *bfad,struct bfad_itnim_s *itnim_drv);void bfa_fcb_itnim_online (struct bfad_itnim_s *itnim_drv);
drivers/scsi/bfa/bfad_im.c +3 -2
@@ -413,13 +413,13 @@ bfad_im_slave_destroy(struct scsi_device *sdev)* BFA FCS itnim alloc callback, after successful PRLI * Context: Interrupt */ -void +int bfa_fcb_itnim_alloc (struct bfad_s *bfad,struct bfa_fcs_itnim_s **itnim,struct bfad_itnim_s **itnim_drv) { *itnim_drv =kzalloc (sizeof (struct bfad_itnim_s ),GFP_ATOMIC );if (*itnim_drv =NULL ) -return ; +return -ENOMEM ; (*itnim_drv)->im = bfad->im; *itnim = &(*itnim_drv)->fcs_itnim;
@@ -430,6 +430,7 @@ bfa_fcb_itnim_alloc(struct bfad_s *bfad, struct bfa_fcs_itnim_s **itnim,*/ INIT_WORK (&(*itnim_drv)->itnim_work, bfad_im_itnim_work_handler); bfad->bfad_flags |=BFAD_RPORT_ONLINE ; +return 0 ; }/*
drivers/scsi/bfa/bfa_fcs_fcpim.c +3 -2
@@ -587,12 +587,13 @@ bfa_fcs_itnim_create(struct bfa_fcs_rport_s *rport)struct bfa_fcs_lport_s *port = rport->port;struct bfa_fcs_itnim_s *itnim;struct bfad_itnim_s *itnim_drv; +int ret;/* * call bfad to allocate the itnim */ -bfa_fcb_itnim_alloc (port->fcs->bfad, &itnim, &itnim_drv); -if (itnim =NULL ) { + ret =bfa_fcb_itnim_alloc (port->fcs->bfad, &itnim, &itnim_drv); +if (ret) {bfa_trc (port->fcs, rport->pwwn);return NULL ; }