Loading fs/nfs/callback_proc.c +20 −8 Original line number Diff line number Diff line Loading @@ -414,27 +414,39 @@ static __be32 validate_seqid(const struct nfs4_slot_table *tbl, const struct nfs4_slot *slot, const struct cb_sequenceargs * args) { __be32 ret; ret = cpu_to_be32(NFS4ERR_BADSLOT); if (args->csa_slotid > tbl->server_highest_slotid) return htonl(NFS4ERR_BADSLOT); goto out_err; /* Replay */ if (args->csa_sequenceid == slot->seq_nr) { ret = cpu_to_be32(NFS4ERR_DELAY); if (nfs4_test_locked_slot(tbl, slot->slot_nr)) return htonl(NFS4ERR_DELAY); goto out_err; /* Signal process_op to set this error on next op */ ret = cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP); if (args->csa_cachethis == 0) return htonl(NFS4ERR_RETRY_UNCACHED_REP); goto out_err; /* Liar! We never allowed you to set csa_cachethis != 0 */ return htonl(NFS4ERR_SEQ_FALSE_RETRY); ret = cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY); goto out_err; } /* Note: wraparound relies on seq_nr being of type u32 */ if (likely(args->csa_sequenceid == slot->seq_nr + 1)) return htonl(NFS4_OK); /* Misordered request */ return htonl(NFS4ERR_SEQ_MISORDERED); ret = cpu_to_be32(NFS4ERR_SEQ_MISORDERED); if (args->csa_sequenceid != slot->seq_nr + 1) goto out_err; return cpu_to_be32(NFS4_OK); out_err: trace_nfs4_cb_seqid_err(args, ret); return ret; } /* Loading fs/nfs/nfs4trace.h +38 −0 Original line number Diff line number Diff line Loading @@ -490,6 +490,44 @@ TRACE_EVENT(nfs4_cb_sequence, __entry->highest_slotid ) ); TRACE_EVENT(nfs4_cb_seqid_err, TP_PROTO( const struct cb_sequenceargs *args, __be32 status ), TP_ARGS(args, status), TP_STRUCT__entry( __field(unsigned int, session) __field(unsigned int, slot_nr) __field(unsigned int, seq_nr) __field(unsigned int, highest_slotid) __field(unsigned int, cachethis) __field(int, error) ), TP_fast_assign( __entry->session = nfs_session_id_hash(&args->csa_sessionid); __entry->slot_nr = args->csa_slotid; __entry->seq_nr = args->csa_sequenceid; __entry->highest_slotid = args->csa_highestslotid; __entry->cachethis = args->csa_cachethis; __entry->error = -be32_to_cpu(status); ), TP_printk( "error=%d (%s) session=0x%08x slot_nr=%u seq_nr=%u " "highest_slotid=%u", __entry->error, show_nfsv4_errors(__entry->error), __entry->session, __entry->slot_nr, __entry->seq_nr, __entry->highest_slotid ) ); #endif /* CONFIG_NFS_V4_1 */ TRACE_EVENT(nfs4_setup_sequence, Loading Loading
fs/nfs/callback_proc.c +20 −8 Original line number Diff line number Diff line Loading @@ -414,27 +414,39 @@ static __be32 validate_seqid(const struct nfs4_slot_table *tbl, const struct nfs4_slot *slot, const struct cb_sequenceargs * args) { __be32 ret; ret = cpu_to_be32(NFS4ERR_BADSLOT); if (args->csa_slotid > tbl->server_highest_slotid) return htonl(NFS4ERR_BADSLOT); goto out_err; /* Replay */ if (args->csa_sequenceid == slot->seq_nr) { ret = cpu_to_be32(NFS4ERR_DELAY); if (nfs4_test_locked_slot(tbl, slot->slot_nr)) return htonl(NFS4ERR_DELAY); goto out_err; /* Signal process_op to set this error on next op */ ret = cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP); if (args->csa_cachethis == 0) return htonl(NFS4ERR_RETRY_UNCACHED_REP); goto out_err; /* Liar! We never allowed you to set csa_cachethis != 0 */ return htonl(NFS4ERR_SEQ_FALSE_RETRY); ret = cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY); goto out_err; } /* Note: wraparound relies on seq_nr being of type u32 */ if (likely(args->csa_sequenceid == slot->seq_nr + 1)) return htonl(NFS4_OK); /* Misordered request */ return htonl(NFS4ERR_SEQ_MISORDERED); ret = cpu_to_be32(NFS4ERR_SEQ_MISORDERED); if (args->csa_sequenceid != slot->seq_nr + 1) goto out_err; return cpu_to_be32(NFS4_OK); out_err: trace_nfs4_cb_seqid_err(args, ret); return ret; } /* Loading
fs/nfs/nfs4trace.h +38 −0 Original line number Diff line number Diff line Loading @@ -490,6 +490,44 @@ TRACE_EVENT(nfs4_cb_sequence, __entry->highest_slotid ) ); TRACE_EVENT(nfs4_cb_seqid_err, TP_PROTO( const struct cb_sequenceargs *args, __be32 status ), TP_ARGS(args, status), TP_STRUCT__entry( __field(unsigned int, session) __field(unsigned int, slot_nr) __field(unsigned int, seq_nr) __field(unsigned int, highest_slotid) __field(unsigned int, cachethis) __field(int, error) ), TP_fast_assign( __entry->session = nfs_session_id_hash(&args->csa_sessionid); __entry->slot_nr = args->csa_slotid; __entry->seq_nr = args->csa_sequenceid; __entry->highest_slotid = args->csa_highestslotid; __entry->cachethis = args->csa_cachethis; __entry->error = -be32_to_cpu(status); ), TP_printk( "error=%d (%s) session=0x%08x slot_nr=%u seq_nr=%u " "highest_slotid=%u", __entry->error, show_nfsv4_errors(__entry->error), __entry->session, __entry->slot_nr, __entry->seq_nr, __entry->highest_slotid ) ); #endif /* CONFIG_NFS_V4_1 */ TRACE_EVENT(nfs4_setup_sequence, Loading