From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoph Hellwig Subject: Re: [PATCH RFC] O_DIRECT reads and writes without i_sem Date: Mon, 1 Nov 2004 16:08:44 +0000 Message-ID: <20041101160844.GA29251@infradead.org> References: <1099323127.23475.80.camel@watt.suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org, akpm@osdl.org Return-path: Received: from phoenix.infradead.org ([81.187.226.98]:17670 "EHLO phoenix.infradead.org") by vger.kernel.org with ESMTP id S274250AbUKAQIx (ORCPT ); Mon, 1 Nov 2004 11:08:53 -0500 To: Chris Mason Content-Disposition: inline In-Reply-To: <1099323127.23475.80.camel@watt.suse.com> Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Mon, Nov 01, 2004 at 10:32:07AM -0500, Chris Mason wrote: > Hello everyone, > > Right now, O_DIRECT reads and writes on regular files have to take i_sem > while reading file metadata in order to make sure we don't race with > hole filling. > > This patch tries to get around that by avoiding i_sem when we are doing > an O_DIRECT read or write inside of i_size. Yet another rw semaphore is > added to struct inode to protect against holes being filled during the > O_DIRECT. direct-io.c gets another special case to be aware of the > locking. > > This has only been lightly tested, I'm posting here for general comments > before I go much further. I'm rounding up some hardware with enough > disks to benchmark it properly. > > Only ext2 and reiserfs are modified to drop i_sem during O_DIRECT. ext3 > needs some care around the orphan lists, and I didn't want to get into > that until the rest of the patch was working. This gets too complicated for it's own sake. What about going down the XFS route and making i_sem a r/w semaphore that's taken only shared during read and write I/O, but exclusive while setting up write I/O outside of i_size? Alternatively just move the I/O locking into the filesytem.