Rajesh Prasad has uploaded this change for review. (
https://review.gerrithub.io/c/ffilz/nfs-ganesha/+/1244768?usp=email )
Change subject: NFS Ganesha Crash - pthread_mutex_lock on NULL in
svc_rqst_expire_insert()
......................................................................
NFS Ganesha Crash - pthread_mutex_lock on NULL in svc_rqst_expire_insert()
PROBLEM | FIX
1 Inline grant from LOCKU worker | `state_block_schedule()` in
`grant_blocked_locks()`
2 `CLNT_CALL_BACK` without `ev_p` | v4.0: `CLNT_CALL_WAIT`; libntirpc:
guard `ev_p`
3 `CLNT_CALL_WAIT` / destroy on v4.1 shared xprt | v4.1: keep
`CLNT_CALL_BACK`; don't
destroy shared client on
failure
4 Retry storm when channel down | Skip v4.0 grant when
`cb_chan_down`; downgrade noisy
CRIT logs
Broken Flow :
```
LOCKU worker thread
grant_blocked_locks()
try_to_grant_lock() ← synchronous
nfsv4_granted_callback()
nfs_rpc_call()
CLNT_CALL_BACK() ← always
svc_rqst_expire_insert()
mutex_lock(NULL) ← CRASH on State_Async/v4.0
```
Fixed Flow :
```
LOCKU worker thread
grant_blocked_locks()
state_block_schedule() ← async handoff
...
State_Async thread
try_to_grant_lock()
[skip if v4.0 && cb_chan_down]
nfsv4_granted_callback()
nfs_rpc_cb_single()
├─ v4.0 → nfs_rpc_v40_single()
│ nfs_rpc_call()
│ CLNT_CALL_WAIT()
│ nfs_rpc_call_finish_success()
│
└─ v4.1 → nfs_rpc_v41_single()
nfs_rpc_call()
CLNT_CALL_BACK()
nfs_rpc_call_process() [async on reply]
[on failure: clear session_bc_up, retry other
session]
```
Change-Id: Ia68cd82dfd572e061d48e34ef9eee8fba41c01ca
Signed-off-by: Rajesh Prasad <raprasad(a)redhat.com>
---
M src/MainNFSD/nfs_rpc_callback.c
M src/SAL/state_lock.c
2 files changed, 100 insertions(+), 9 deletions(-)
git pull ssh://review.gerrithub.io:29418/ffilz/nfs-ganesha refs/changes/68/1244768/1
--
To view, visit
https://review.gerrithub.io/c/ffilz/nfs-ganesha/+/1244768?usp=email
To unsubscribe, or for help writing mail filters, visit
https://review.gerrithub.io/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: ffilz/nfs-ganesha
Gerrit-Branch: next
Gerrit-Change-Id: Ia68cd82dfd572e061d48e34ef9eee8fba41c01ca
Gerrit-Change-Number: 1244768
Gerrit-PatchSet: 1
Gerrit-Owner: Rajesh Prasad <raprasad(a)redhat.com>