Commit c843ce20 authored by Fan Yong's avatar Fan Yong Committed by Greg Kroah-Hartman

staging: lustre: ptlrpc: comment for FLD_QUERY RPC reply swab

The 'fld_read_server' uses 'RMF_GENERIC_DATA' to hold the 'FLD_QUERY'
RPC reply that is composed of 'struct lu_seq_range_array'. But there
is not registered swabber function for 'RMF_GENERIC_DATA'. So the RPC
peers need to handle the RPC reply with fixed little-endian format.

In theory, we can define new structure with some swabber registered
to handle the 'FLD_QUERY' RPC reply result automatically. But from
the implementation view, it is not easy to be done within current
'struct req_msg_field' framework. Because the sequence range array
in the RPC reply is not fixed length, instead, its length depends
on 'lu_seq_range' count, that is unknown when prepare the RPC buffer.
Generally, for such flexible length RPC usage, there will be a field
in the RPC layout to indicate the data length. But for the 'FLD_READ'
RPC, we have no way to do that unless we add new length filed that
will broken the on-wire RPC protocol and cause interoperability
trouble with old peer.
Signed-off-by: default avatarFan Yong <fan.yong@intel.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6284
Reviewed-on: http://review.whamcloud.com/22309Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Reviewed-by: default avatarJames Simmons <uja.ornl@yahoo.com>
Signed-off-by: default avatarJames Simmons <jsimmons@infradead.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 07b71df1
......@@ -1181,6 +1181,23 @@ struct req_format RQF_FLD_QUERY =
DEFINE_REQ_FMT0("FLD_QUERY", fld_query_client, fld_query_server);
EXPORT_SYMBOL(RQF_FLD_QUERY);
/*
* The 'fld_read_server' uses 'RMF_GENERIC_DATA' to hold the 'FLD_QUERY'
* RPC reply that is composed of 'struct lu_seq_range_array'. But there
* is not registered swabber function for 'RMF_GENERIC_DATA'. So the RPC
* peers need to handle the RPC reply with fixed little-endian format.
*
* In theory, we can define new structure with some swabber registered to
* handle the 'FLD_QUERY' RPC reply result automatically. But from the
* implementation view, it is not easy to be done within current "struct
* req_msg_field" framework. Because the sequence range array in the RPC
* reply is not fixed length, instead, its length depends on 'lu_seq_range'
* count, that is unknown when prepare the RPC buffer. Generally, for such
* flexible length RPC usage, there will be a field in the RPC layout to
* indicate the data length. But for the 'FLD_READ' RPC, we have no way to
* do that unless we add new length filed that will broken the on-wire RPC
* protocol and cause interoperability trouble with old peer.
*/
struct req_format RQF_FLD_READ =
DEFINE_REQ_FMT0("FLD_READ", fld_read_client, fld_read_server);
EXPORT_SYMBOL(RQF_FLD_READ);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment