From: Andrew Morton <akpm@osdl.org>
To: Christoph Hellwig <hch@infradead.org>
Cc: miquels@cistron.nl, linux-kernel@vger.kernel.org, nathans@sgi.com
Subject: Re: 2.6.2-rc2 nfsd+xfs spins in i_size_read()
Date: Fri, 30 Jan 2004 15:13:16 -0800 [thread overview]
Message-ID: <20040130151316.40d70ed3.akpm@osdl.org> (raw)
In-Reply-To: <20040130225353.A26383@infradead.org>
Christoph Hellwig <hch@infradead.org> wrote:
>
> On Fri, Jan 30, 2004 at 02:34:59PM -0800, Andrew Morton wrote:
> > If two CPUs hit i_size_write() at the same time we have a bug. That
> > function requires that the caller provide external serialisation, via i_sem.
>
> O_APPEND|O_DIRECT writes could do that under XFS..
Sigh.
diff -puN include/linux/fs.h~i_size_write-check include/linux/fs.h
--- 25/include/linux/fs.h~i_size_write-check Fri Jan 30 15:09:47 2004
+++ 25-akpm/include/linux/fs.h Fri Jan 30 15:10:28 2004
@@ -464,9 +464,11 @@ static inline loff_t i_size_read(struct
#endif
}
+void i_size_write_check(struct inode *inode);
static inline void i_size_write(struct inode *inode, loff_t i_size)
{
+ i_size_write_check(inode);
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
write_seqcount_begin(&inode->i_size_seqcount);
inode->i_size = i_size;
diff -puN mm/filemap.c~i_size_write-check mm/filemap.c
--- 25/mm/filemap.c~i_size_write-check Fri Jan 30 15:10:23 2004
+++ 25-akpm/mm/filemap.c Fri Jan 30 15:11:41 2004
@@ -2010,3 +2010,18 @@ out:
}
EXPORT_SYMBOL_GPL(generic_file_direct_IO);
+
+void i_size_write_check(struct inode *inode)
+{
+ static int count = 0;
+
+ if (down_trylock(&inode->i_sem) == 0) {
+ if (count < 10) {
+ count++;
+ printk("i_size_write() called without i_sem\n");
+ dump_stack();
+ }
+ up(&inode->i_sem);
+ }
+}
+EXPORT_SYMBOL(i_size_write_check);
_
next prev parent reply other threads:[~2004-01-30 23:12 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-28 17:17 2.6.2-rc2 nfsd+xfs spins in i_size_read() Miquel van Smoorenburg
2004-01-29 6:25 ` Andrew Morton
2004-01-29 23:20 ` Miquel van Smoorenburg
2004-02-04 0:03 ` Christoph Hellwig
2004-02-03 14:13 ` Steve Lord
2004-02-04 15:16 ` Christoph Hellwig
2004-02-04 18:17 ` Christoph Hellwig
2004-02-04 0:06 ` David Weinehall
2004-02-04 0:07 ` Christoph Hellwig
2004-01-30 16:01 ` Miquel van Smoorenburg
2004-01-30 20:21 ` Miquel van Smoorenburg
2004-01-30 22:13 ` Miquel van Smoorenburg
2004-01-30 22:34 ` Andrew Morton
2004-01-30 22:53 ` Christoph Hellwig
2004-01-30 23:13 ` Andrew Morton [this message]
2004-01-31 1:25 ` Miquel van Smoorenburg
2004-01-31 1:38 ` Andrew Morton
2004-01-31 11:46 ` Miquel van Smoorenburg
2004-01-31 15:59 ` Steve Lord
2004-02-01 16:15 ` Christoph Hellwig
2004-01-31 16:41 ` Steve Lord
2004-01-31 17:07 ` Christoph Hellwig
2004-02-01 1:46 ` Anton Blanchard
2004-01-30 23:07 ` Nathan Scott
2004-01-29 6:30 ` Nathan Scott
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=20040130151316.40d70ed3.akpm@osdl.org \
--to=akpm@osdl.org \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=miquels@cistron.nl \
--cc=nathans@sgi.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.