nfsd4: don't BUG in delegation break callback
authorJ. Bruce Fields <bfields@redhat.com>
Tue, 16 Oct 2012 16:39:33 +0000 (12:39 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Thu, 8 Nov 2012 00:31:33 +0000 (19:31 -0500)
These conditions would indeed indicate bugs in the code, but if we want
to hear about them we're likely better off warning and returning than
immediately dying while holding file_lock_lock.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfs4state.c

index bc8507c235254aa1a4f21cde5d87d4aeb27e2126..db7258c134234f6a48d59b76bc1bfd6944aa2a1f 100644 (file)
@@ -2554,9 +2554,14 @@ static void nfsd_break_deleg_cb(struct file_lock *fl)
        struct nfs4_file *fp = (struct nfs4_file *)fl->fl_owner;
        struct nfs4_delegation *dp;
 
-       BUG_ON(!fp);
-       /* We assume break_lease is only called once per lease: */
-       BUG_ON(fp->fi_had_conflict);
+       if (!fp) {
+               WARN(1, "(%p)->fl_owner NULL\n", fl);
+               return;
+       }
+       if (fp->fi_had_conflict) {
+               WARN(1, "duplicate break on %p\n", fp);
+               return;
+       }
        /*
         * We don't want the locks code to timeout the lease for us;
         * we'll remove it ourself if a delegation isn't returned