From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pekka Enberg Subject: Re: [PATCH 04/23] vfs: Introduce infrastructure for revoking a file Date: Tue, 2 Jun 2009 08:16:44 +0300 Message-ID: <84144f020906012216n715a04d0ha492abc12175816@mail.gmail.com> References: <1243893048-17031-4-git-send-email-ebiederm@xmission.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Al Viro , linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, Hugh Dickins , Tejun Heo , Alexey Dobriyan , Linus Torvalds , Alan Cox , Greg Kroah-Hartman , Nick Piggin , Andrew Morton , Christoph Hellwig , "Eric W. Biederman" To: "Eric W. Biederman" Return-path: In-Reply-To: <1243893048-17031-4-git-send-email-ebiederm@xmission.com> Sender: linux-pci-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Hi Eric, On Tue, Jun 2, 2009 at 12:50 AM, Eric W. Biederman wrote: > +#ifdef CONFIG_FILE_HOTPLUG > + > +static bool file_in_use(struct file *file) > +{ > + =A0 =A0 =A0 struct task_struct *leader, *task; > + =A0 =A0 =A0 bool in_use =3D false; > + =A0 =A0 =A0 int i; > + > + =A0 =A0 =A0 rcu_read_lock(); > + =A0 =A0 =A0 do_each_thread(leader, task) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 for (i =3D 0; i < MAX_FILE_HOTPLUG_LOCK= _DEPTH; i++) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (task->file_hotplug_= lock[i] =3D=3D file) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 in_use = =3D true; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto fo= und; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 } > + =A0 =A0 =A0 } while_each_thread(leader, task); > +found: > + =A0 =A0 =A0 rcu_read_unlock(); > + =A0 =A0 =A0 return in_use; > +} This seems rather heavy-weight. If we're going to use this infrastructure for forced unmount, I think this will be a problem. Can't we two this in two stages: (1) mark a bit that forces file_hotplug_read_trylock to always fail and (2) block until the last remaining in-kernel file_hotplug_read_unlock() has executed? Pekka