That's pretty much an inherent problem. The presumption is that most callers of rdma_poll_cq want to apply transport neutral logic. This is especially easy when no specific recovery plans are in place based upon the specific error (the specific error just gets logged).
The weakness of the extensible sub-type approach is ensuring that the receiving buffer is large enough -- struct sockaddr being the classic example of this problem. The type 'struct rdma_wc_storage' is intended to address this problem by defining a type that can hold any of the results. The presumption is that the consumer will note the type, and if they wish to process tht type shift to a routine that casts the wc to the required matching struct. The alternative would be to use extensivel sub-types on input, and unions for work completions. That works, but could easily be confusing to developers. On a lesser scale, the naming convention coulde be flipped so that 'rdma_wc' represented adequate storage for the worst case work completion, while 'struct rdma_wc_min' would represent the minimal common header only. > -----Original Message----- > From: Sean Hefty [mailto:[EMAIL PROTECTED] > Sent: Wednesday, July 13, 2005 11:24 AM > To: Caitlin Bestler > Cc: openib-general; [EMAIL PROTECTED] > Subject: Re: [openib-general] makiing ibverb.h transport > neutral -- 2nd draft > > Caitlin Bestler wrote: > > The impact of this on the existing code would be quite > wide, but quite > > shallow. Many types would be renamed form 'ib_xyz' > > to 'rdma_xyz', if being used in transport neutral code. Or when > > staying infiniband specific fields that now qualified as transport > > neutral would require "common." to be inserted before the > field name. > > Some constants are shifted from IB_XXX to RDMA_XXX. > > Embedding a struct rdma_object inside a struct ib_object > essentially removes type checking from the API. For example, > a user calling rdma_poll_cq() must know that they are using > IB and reference the correct data structure, such as: > > struct ib_wc wc; > > rdma_poll_cq(cq, 1, &wc.common); > > Similarly for posting RDMA requests through rdma_post_send(). > > - Sean > _______________________________________________ openib-general mailing list [email protected] http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
