| From 9a3ba432330e504ac61ff0043dbdaba7cea0e35a Mon Sep 17 00:00:00 2001 |
| From: Trond Myklebust <Trond.Myklebust@netapp.com> |
| Date: Mon, 12 Mar 2012 18:01:48 -0400 |
| Subject: NFSv4: Rate limit the state manager warning messages |
| |
| From: Trond Myklebust <Trond.Myklebust@netapp.com> |
| |
| commit 9a3ba432330e504ac61ff0043dbdaba7cea0e35a upstream. |
| |
| Prevent the state manager from filling up system logs when recovery |
| fails on the server. |
| |
| Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/nfs/callback_xdr.c | 4 +++- |
| fs/nfs/nfs4proc.c | 2 +- |
| fs/nfs/nfs4state.c | 4 ++-- |
| 3 files changed, 6 insertions(+), 4 deletions(-) |
| |
| --- a/fs/nfs/callback_xdr.c |
| +++ b/fs/nfs/callback_xdr.c |
| @@ -9,6 +9,8 @@ |
| #include <linux/sunrpc/svc.h> |
| #include <linux/nfs4.h> |
| #include <linux/nfs_fs.h> |
| +#include <linux/ratelimit.h> |
| +#include <linux/printk.h> |
| #include <linux/slab.h> |
| #include <linux/sunrpc/bc_xprt.h> |
| #include "nfs4_fs.h" |
| @@ -167,7 +169,7 @@ static __be32 decode_compound_hdr_arg(st |
| if (hdr->minorversion <= 1) { |
| hdr->cb_ident = ntohl(*p++); /* ignored by v4.1 */ |
| } else { |
| - printk(KERN_WARNING "%s: NFSv4 server callback with " |
| + pr_warn_ratelimited("NFS: %s: NFSv4 server callback with " |
| "illegal minor version %u!\n", |
| __func__, hdr->minorversion); |
| return htonl(NFS4ERR_MINOR_VERS_MISMATCH); |
| --- a/fs/nfs/nfs4proc.c |
| +++ b/fs/nfs/nfs4proc.c |
| @@ -1838,7 +1838,7 @@ static struct nfs4_state *nfs4_do_open(s |
| * the user though... |
| */ |
| if (status == -NFS4ERR_BAD_SEQID) { |
| - printk(KERN_WARNING "NFS: v4 server %s " |
| + pr_warn_ratelimited("NFS: v4 server %s " |
| " returned a bad sequence-id error!\n", |
| NFS_SERVER(dir)->nfs_client->cl_hostname); |
| exception.retry = 1; |
| --- a/fs/nfs/nfs4state.c |
| +++ b/fs/nfs/nfs4state.c |
| @@ -935,7 +935,7 @@ static void nfs_increment_seqid(int stat |
| case -NFS4ERR_BAD_SEQID: |
| if (seqid->sequence->flags & NFS_SEQID_CONFIRMED) |
| return; |
| - printk(KERN_WARNING "NFS: v4 server returned a bad" |
| + pr_warn_ratelimited("NFS: v4 server returned a bad" |
| " sequence-id error on an" |
| " unconfirmed sequence %p!\n", |
| seqid->sequence); |
| @@ -1764,7 +1764,7 @@ static void nfs4_state_manager(struct nf |
| } while (atomic_read(&clp->cl_count) > 1); |
| return; |
| out_error: |
| - printk(KERN_WARNING "Error: state manager failed on NFSv4 server %s" |
| + pr_warn_ratelimited("NFS: state manager failed on NFSv4 server %s" |
| " with error %d\n", clp->cl_hostname, -status); |
| nfs4_end_drain_session(clp); |
| nfs4_clear_state_manager_bit(clp); |