>Yi Zou wrote: >> When the D bit is set if the FKA_ADV_Period of the FIP Discovery >> Advertisement, the ENode should not transmit period ENode FIP Keep Alive >and >> VN_Port FIP Keep Alive (FC-BB-5 Rev2, 7.8.3.13). >> >> Note that fcf->flags is taken directly from the fip_header, I am claiming >one >> bit for the purpose of the FIP_FKA_Period D bit as FIP_FL_FK_ADV_B, and use >> FIP_HEADER_FLAGS as bitmask for bits used in fip_header. > >I would not do that. See comments below...
> >> Signed-off-by: Yi Zou <[email protected]> >> --- >> >> drivers/scsi/fcoe/libfcoe.c | 6 ++++-- >> include/scsi/fc/fc_fip.h | 10 +++++++++- >> 2 files changed, 13 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/scsi/fcoe/libfcoe.c b/drivers/scsi/fcoe/libfcoe.c >> index 3c501d4..a3745a2 100644 >> --- a/drivers/scsi/fcoe/libfcoe.c >> +++ b/drivers/scsi/fcoe/libfcoe.c >> @@ -421,7 +421,7 @@ static int fcoe_ctlr_encaps(struct fcoe_ctlr *fip, >struct fc_lport *lport, >> return -ENODEV; >> >> /* set flags according to both FCF and lport's capability on SPMA */ >> - fip_flags = fcf->flags; >> + fip_flags = (fcf->flags & FIP_HEADER_FLAGS); >> fip_flags &= fip->spma ? FIP_FL_SPMA | FIP_FL_FPMA : FIP_FL_FPMA; >> if (!fip_flags) >> return -ENODEV; >> @@ -665,6 +665,8 @@ static int fcoe_ctlr_parse_adv(struct fcoe_ctlr *fip, >> if (dlen != sizeof(struct fip_fka_desc)) >> goto len_err; >> fka = (struct fip_fka_desc *)desc; >> + if (fka->fd_flags & FIP_FKA_ADV_D) >> + fcf->flags |= FIP_FL_FKA_ADV_D; >> t = ntohl(fka->fd_fka_period); >> if (t >= FCOE_CTLR_MIN_FKA) >> fcf->fka_period = msecs_to_jiffies(t); >> @@ -1160,7 +1162,7 @@ static void fcoe_ctlr_timeout(unsigned long arg) >> } >> } >> >> - if (sel) { >> + if ((sel) && (!(sel->flags & FIP_FL_FKA_ADV_D))) { > >Don't add extra paren or space: > > if (sel && !(sel->flags & FIP_FL_FKA_ADV_D)) { Thanks for catching this, not sure why the extra space was not caught by my checkpatch though. > > >> if (time_after_eq(jiffies, fip->ctlr_ka_time)) { >> fip->ctlr_ka_time = jiffies + sel->fka_period; >> fip->send_ctlr_ka = 1; >> diff --git a/include/scsi/fc/fc_fip.h b/include/scsi/fc/fc_fip.h >> index 3d138c1..160c0c9 100644 >> --- a/include/scsi/fc/fc_fip.h >> +++ b/include/scsi/fc/fc_fip.h >> @@ -105,8 +105,12 @@ enum fip_flag { >> FIP_FL_AVAIL = 0x0004, /* available for FLOGI/ELP */ >> FIP_FL_SOL = 0x0002, /* this is a solicited message */ >> FIP_FL_FPORT = 0x0001, /* sent from an F port */ >> + /* these bits are not in fip header */ >> + FIP_FL_FKA_ADV_D = 0x0008 /* no need FKF from ENode */ > >If its not in the header, lets put it in another enum. > Ok, I will put this into a separate struct and fix the spacing/paren issue. Thanks, yi >> }; >> >> +#define FIP_HEADER_FLAGS (FIP_FL_FPMA | FIP_FL_SPMA | \ >> + FIP_FL_AVAIL | FIP_FL_SOL | FIP_FL_FPORT) >> /* >> * Common descriptor header format. >> */ >> @@ -214,10 +218,14 @@ struct fip_vn_desc { >> */ >> struct fip_fka_desc { >> struct fip_desc fd_desc; >> - __u8 fd_resvd[2]; >> + __u8 fd_resvd; >> + __u8 fd_flags; /* bit0 is fka disable flag */ >> __be32 fd_fka_period; /* adv./keep-alive period in mS */ >> } __attribute__((packed)); >> >> +/* FIP_DT_FKA flags */ >> +#define FIP_FKA_ADV_D (1 << 0) >> + >> /* >> * FIP_DT_VENDOR descriptor. >> */ >> >> _______________________________________________ >> devel mailing list >> [email protected] >> http://www.open-fcoe.org/mailman/listinfo/devel _______________________________________________ devel mailing list [email protected] http://www.open-fcoe.org/mailman/listinfo/devel
