From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932234AbbFQRvA (ORCPT ); Wed, 17 Jun 2015 13:51:00 -0400 Received: from mx1.redhat.com ([209.132.183.28]:58307 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752136AbbFQRux (ORCPT ); Wed, 17 Jun 2015 13:50:53 -0400 From: Jeff Moyer To: Oleg Nesterov Cc: Al Viro , Andrew Morton , Benjamin LaHaise , linux-aio@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/3] aio_ring_remap: turn the ctx->dead check into WARN_ON() References: <20150616230426.GA15790@redhat.com> X-PGP-KeyID: 1F78E1B4 X-PGP-CertKey: F6FE 280D 8293 F72C 65FD 5A58 1FF8 A7CA 1F78 E1B4 X-PCLoadLetter: What the f**k does that mean? Date: Wed, 17 Jun 2015 13:50:51 -0400 In-Reply-To: <20150616230426.GA15790@redhat.com> (Oleg Nesterov's message of "Wed, 17 Jun 2015 01:04:26 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Oleg Nesterov writes: > atomic_read(&ctx->dead) in aio_ring_remap() looks confusing. > kill_ioctx() sets ctx->dead and removes ctx from ->ioctx_table > "atomically" under mm->ioctx_lock, so aio_ring_remap() can never > see a dead ctx. > > If we really want this check, we should put it under WARN_ON() > and it should not depend on aio_ring_file == file. Just get rid of the check, it doesn't make any sense. -Jeff > > Signed-off-by: Oleg Nesterov > --- > fs/aio.c | 16 ++++++++-------- > 1 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/fs/aio.c b/fs/aio.c > index 480440f..0693333 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -325,14 +325,14 @@ static int aio_ring_remap(struct file *file, struct vm_area_struct *vma) > rcu_read_lock(); > table = rcu_dereference(mm->ioctx_table); > for (i = 0; i < table->nr; i++) { > - struct kioctx *ctx; > - > - ctx = table->table[i]; > - if (ctx && ctx->aio_ring_file == file) { > - if (!atomic_read(&ctx->dead)) { > - ctx->user_id = ctx->mmap_base = vma->vm_start; > - res = 0; > - } > + struct kioctx *ctx = table->table[i]; > + > + if (!ctx || WARN_ON(atomic_read(&ctx->dead))) > + continue; > + > + if (ctx->aio_ring_file == file) { > + ctx->user_id = ctx->mmap_base = vma->vm_start; > + res = 0; > break; > } > }