On Mar 10, 2011, at 2:58 PM, Trond Myklebust wrote: > On Thu, 2011-03-10 at 12:29 -0500, Chuck Lever wrote: >> @@ -5915,6 +5962,37 @@ out: >> return status; >> } >> >> +/* >> + * Decode migration status probe >> + */ >> +static int nfs4_xdr_dec_get_mig_status(struct rpc_rqst *req, >> + struct xdr_stream *xdr, >> + struct nfs4_fs_locations_res *res) >> +{ >> + struct compound_hdr hdr; >> + int status; >> + >> + status = decode_compound_hdr(xdr, &hdr); >> + if (status) >> + goto out; >> + status = decode_sequence(xdr, &res->seq_res, req); >> + if (status) >> + goto out; >> + status = decode_putfh(xdr); >> + if (status) >> + goto out; >> + xdr_enter_page(xdr, PAGE_SIZE); >> + status = decode_getfattr(xdr, &res->fs_locations->fattr, >> + res->fs_locations->server, >> + !RPC_IS_ASYNC(req->rq_task)); >> + if (status) >> + goto out; >> + if (res->renew) >> + status = decode_renew(xdr); >> +out: >> + return status; >> +} >> + >> #if defined(CONFIG_NFS_V4_1) >> /* >> * Decode EXCHANGE_ID response >> @@ -6255,6 +6333,7 @@ struct rpc_procinfo nfs4_procedures[] = { >> PROC(GETACL, enc_getacl, dec_getacl), >> PROC(SETACL, enc_setacl, dec_setacl), >> PROC(FS_LOCATIONS, enc_fs_locations, dec_fs_locations), >> + PROC(GET_MIG_STATUS, enc_get_mig_status, dec_get_mig_status) > > Yet more trouble for nfsstat... Indeed. >> , >> PROC(RELEASE_LOCKOWNER, enc_release_lockowner, dec_release_lockowner), >> #if defined(CONFIG_NFS_V4_1) >> PROC(EXCHANGE_ID, enc_exchange_id, dec_exchange_id), > > So looking at what you are doing in GET_MIG_STATUS, it appears to me > that > > 1) We don't need it for NFSv4.1: the existing fs_locations request just > works for that. > 2) The only new thing in NFSv4.0 is the renew operation... It's true that NFSv4.1 doesn't require a RENEW, but we do still need a new op for migration support. The original op uses PUTFH;LOOKUP;GETATTR(fs_locations). We can't use a LOOKUP request to retrieve the fs_locations array for the root directory of an FSID. So, the new op is substantively different than the original in more ways than the addition of the RENEW. > So how about if we just modify the existing fs_locations call to append > a RENEW request if/when we supply a clientid? I'm willing to think more about this, but I don't see an easy way to reuse the existing fs_locations proc. -- Chuck Lever chuck[dot]lever[at]oracle[dot]com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html