On Nov 23, 2024, at 2:25 AM, Pavel Machek pavel@denx.de wrote:
Hi!
This is the start of the stable review cycle for the 6.1.119 release. There are 73 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Chuck Lever chuck.lever@oracle.com NFSD: Limit the number of concurrent async COPY operations
@@ -1782,10 +1783,16 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, if (nfsd4_copy_is_async(copy)) {
status = nfserrno(-ENOMEM); async_copy = kzalloc(sizeof(struct nfsd4_copy), GFP_KERNEL); if (!async_copy) goto out_err;
This is wrong. Status is success from previous code, and you are now returning it in case of error.
This "status =" line was removed because the out_err: label unconditionally sets status = nfserr_jukebox.
(Also, the atomic dance does not work. It will not allow desired concurency in case of races. Semaphore is canonical solution for this.)
I'm not certain which "atomic dance" you are referring to here. Do you mean:
1792 if (atomic_inc_return(&nn->pending_async_copies) > 1793 (int)rqstp->rq_pool->sp_nrthreads) 1794 goto out_err;
The cap doesn't have to be perfect; it just has to make sure that the pending value doesn't underflow or overflow. Note that this code is updated in a later patch.
Naturally we have to address any issues in upstream first, so please report issues and propose changes to linux-nfs@vger.kernel.org mailto:linux-nfs@vger.kernel.org . Thanks for the review!
-- Chuck Lever