A typo in nfs4_refresh_delegation_stateid() means we're leaking an RCU lock, and always returning a value of 'false'. As the function description states, we were always supposed to return 'true' if a matching delegation was found.
Unified · Split
| @@ -1191,7 +1191,7 @@ bool nfs4_refresh_delegation_stateid(nfs4_stateid *dst, struct inode *inode) · 1190 unmodified lines | |||
| 1191 | if (delegation != NULL && | 1191 | if (delegation != NULL && |
| 1192 | nfs4_stateid_match_other(dst, &delegation->stateid)) { | 1192 | nfs4_stateid_match_other(dst, &delegation->stateid)) { |
| 1193 | dst->seqid = delegation->stateid.seqid; | 1193 | dst->seqid = delegation->stateid.seqid; |
| 1194 | return ret; | 1194 | ret = true; |
| 1195 | } | 1195 | } |
| 1196 | rcu_read_unlock(); | 1196 | rcu_read_unlock(); |
| 1197 | out: | 1197 | out: |