提交 063b0fb9 编写于 作者: J J. Bruce Fields

nfsd4: downgrade some fs/nfsd/nfs4state.c BUG's

Linus has pointed out that indiscriminate use of BUG's can make it
harder to diagnose bugs because they can bring a machine down, often
before we manage to get any useful debugging information to the logs.
(Consider, for example, a BUG() that fires in a workqueue, or while
holding a spinlock).

Most of these BUG's won't do much more than kill an nfsd thread, but it
would still probably be safer to get out the warning without dying.

There's still more of this to do in nfsd/.
Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
上级 ffe1137b
...@@ -190,7 +190,7 @@ static struct list_head file_hashtbl[FILE_HASH_SIZE]; ...@@ -190,7 +190,7 @@ static struct list_head file_hashtbl[FILE_HASH_SIZE];
static void __nfs4_file_get_access(struct nfs4_file *fp, int oflag) static void __nfs4_file_get_access(struct nfs4_file *fp, int oflag)
{ {
BUG_ON(!(fp->fi_fds[oflag] || fp->fi_fds[O_RDWR])); WARN_ON_ONCE(!(fp->fi_fds[oflag] || fp->fi_fds[O_RDWR]));
atomic_inc(&fp->fi_access[oflag]); atomic_inc(&fp->fi_access[oflag]);
} }
...@@ -249,7 +249,7 @@ static inline int get_new_stid(struct nfs4_stid *stid) ...@@ -249,7 +249,7 @@ static inline int get_new_stid(struct nfs4_stid *stid)
* preallocations that can exist at a time, but the state lock * preallocations that can exist at a time, but the state lock
* prevents anyone from using ours before we get here: * prevents anyone from using ours before we get here:
*/ */
BUG_ON(error); WARN_ON_ONCE(error);
/* /*
* It shouldn't be a problem to reuse an opaque stateid value. * It shouldn't be a problem to reuse an opaque stateid value.
* I don't think it is for 4.1. But with 4.0 I worry that, for * I don't think it is for 4.1. But with 4.0 I worry that, for
...@@ -494,7 +494,8 @@ static int nfs4_access_to_omode(u32 access) ...@@ -494,7 +494,8 @@ static int nfs4_access_to_omode(u32 access)
case NFS4_SHARE_ACCESS_BOTH: case NFS4_SHARE_ACCESS_BOTH:
return O_RDWR; return O_RDWR;
} }
BUG(); WARN_ON_ONCE(1);
return O_RDONLY;
} }
/* release all access and file references for a given stateid */ /* release all access and file references for a given stateid */
...@@ -1605,10 +1606,9 @@ nfsd4_exchange_id(struct svc_rqst *rqstp, ...@@ -1605,10 +1606,9 @@ nfsd4_exchange_id(struct svc_rqst *rqstp,
switch (exid->spa_how) { switch (exid->spa_how) {
case SP4_NONE: case SP4_NONE:
break; break;
default: /* checked by xdr code */
WARN_ON_ONCE(1);
case SP4_SSV: case SP4_SSV:
return nfserr_serverfault;
default:
BUG(); /* checked by xdr code */
case SP4_MACH_CRED: case SP4_MACH_CRED:
return nfserr_serverfault; /* no excuse :-/ */ return nfserr_serverfault; /* no excuse :-/ */
} }
...@@ -2912,7 +2912,7 @@ static void nfsd4_open_deleg_none_ext(struct nfsd4_open *open, int status) ...@@ -2912,7 +2912,7 @@ static void nfsd4_open_deleg_none_ext(struct nfsd4_open *open, int status)
open->op_why_no_deleg = WND4_CANCELLED; open->op_why_no_deleg = WND4_CANCELLED;
break; break;
case NFS4_SHARE_WANT_NO_DELEG: case NFS4_SHARE_WANT_NO_DELEG:
BUG(); /* not supposed to get here */ WARN_ON_ONCE(1);
} }
} }
} }
...@@ -3466,7 +3466,11 @@ nfs4_preprocess_stateid_op(struct net *net, struct nfsd4_compound_state *cstate, ...@@ -3466,7 +3466,11 @@ nfs4_preprocess_stateid_op(struct net *net, struct nfsd4_compound_state *cstate,
goto out; goto out;
if (filpp) { if (filpp) {
*filpp = dp->dl_file->fi_deleg_file; *filpp = dp->dl_file->fi_deleg_file;
BUG_ON(!*filpp); if (!*filpp) {
WARN_ON_ONCE(1);
status = nfserr_serverfault;
goto out;
}
} }
break; break;
case NFS4_OPEN_STID: case NFS4_OPEN_STID:
...@@ -3693,7 +3697,7 @@ static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_ac ...@@ -3693,7 +3697,7 @@ static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_ac
case NFS4_SHARE_ACCESS_BOTH: case NFS4_SHARE_ACCESS_BOTH:
break; break;
default: default:
BUG(); WARN_ON_ONCE(1);
} }
} }
...@@ -3882,7 +3886,7 @@ last_byte_offset(u64 start, u64 len) ...@@ -3882,7 +3886,7 @@ last_byte_offset(u64 start, u64 len)
{ {
u64 end; u64 end;
BUG_ON(!len); WARN_ON_ONCE(!len);
end = start + len; end = start + len;
return end > start ? end - 1: NFS4_MAX_UINT64; return end > start ? end - 1: NFS4_MAX_UINT64;
} }
...@@ -4552,7 +4556,7 @@ nfs4_release_reclaim(struct nfsd_net *nn) ...@@ -4552,7 +4556,7 @@ nfs4_release_reclaim(struct nfsd_net *nn)
nfs4_remove_reclaim_record(crp, nn); nfs4_remove_reclaim_record(crp, nn);
} }
} }
BUG_ON(nn->reclaim_str_hashtbl_size); WARN_ON_ONCE(nn->reclaim_str_hashtbl_size);
} }
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册