mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Steven Whitehouse <swhiteho@redhat.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Jan Engelhardt <jengelh@linux01.gwdg.de>,
	linux-kernel@vger.kernel.org,
	Russell Cattelan <cattelan@redhat.com>,
	David Teigland <teigland@redhat.com>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH 05/16] GFS2: File and inode operations
Date: Mon, 18 Sep 2006 09:27:22 +0100	[thread overview]
Message-ID: <1158568042.11901.267.camel@quoit.chygwyn.com> (raw)
In-Reply-To: <20060916133947.GA1498@infradead.org>

Hi,

On Sat, 2006-09-16 at 14:39 +0100, Christoph Hellwig wrote:
> > 
> > >+struct file gfs2_internal_file_sentinal = {
> > >+	.f_flags = O_NOATIME|O_RDONLY,
> > >+};
> 
> Statically allocation a struct file is not allowed.  Where do you use
> gfs2_internal_read?  It really shouldn't be needed.
> 
The sentinel is used as a flag value only. Its passed through to the
underlying address space operations of readpage(s) to indicate that the
glock for the inode is already held and therefore locking isn't required
at the address space operations level. The glock is used to ensure
consistancy when reading certain "internal" files.

For example, the resource index contains a list of all the resource
groups on disk and is written through the gfs2meta filesystem when the
filesystem is expanded. We need a way to read the resource index in, in
such a way as to ensure its not being updated in the middle of the read.
So we use gfs2_internal_read to do that, holding the glock for the
entire operation.

It has a similar use for some of the other internal files as well.

> > >+static int gfs2_readdir(struct file *file, void *dirent, filldir_t filldir)
> > >+{
> > >+	int error;
> > >+
> > >+	if (strcmp(current->comm, "nfsd") != 0)
> > 
> > Is not there a better way to do this? Note that there is also a "nfsd4" process
> 
> This is in fact not allowed at at all.  Please fix you readdir code not to
> need special cases for nfsd.
> 
Perhaps you can suggest a solution to the problem.... We have a bz
#201015 (in bugzilla.redhat.com) tracking this.

The problem is caused by the way in which nfsd does a stat from
readdir's filldir routine. We have to acquire and drop the directory
glock in filldir otherwise it may deadlock with the glocks which are
taken by stat. As a result of this, we then have to revalidate the
position in the directory on each call to filldir, rather than locking
the whole readdir call as the "normal" version does, so the current nfs
variant of readdir is much slower than the "normal" one even though it
could otherwise potentially be used for both cases.

I will try and have a look at this problem in more detail some time this
week,

Steve.



  reply	other threads:[~2006-09-18  8:24 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-31 13:33 Steven Whitehouse
2006-09-04  6:52 ` Jan Engelhardt
2006-09-04 14:50   ` Steven Whitehouse
2006-09-04 14:55     ` Jan Engelhardt
2006-09-16 13:39   ` Christoph Hellwig
2006-09-18  8:27     ` Steven Whitehouse [this message]
2006-09-22 11:06     ` Steven Whitehouse
  -- strict thread matches above, loose matches on Subject: below --
2006-04-21 16:13 Steven Whitehouse
2006-04-23  7:55 ` Andreas Dilger
2006-04-24 13:53   ` Steven Whitehouse
2006-04-24 22:19     ` Andreas Dilger
2006-04-25  9:27       ` Steven Whitehouse
2006-04-25 10:26     ` Christoph Hellwig
2006-04-25 11:14       ` Steven Whitehouse
2006-04-25 12:38         ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1158568042.11901.267.camel@quoit.chygwyn.com \
    --to=swhiteho@redhat.com \
    --cc=cattelan@redhat.com \
    --cc=hch@infradead.org \
    --cc=jengelh@linux01.gwdg.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=teigland@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®