mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Nick Piggin <npiggin@suse.de>
To: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [patch] x86: some lock annotations for user copy paths
Date: Wed, 10 Sep 2008 17:12:45 +0200	[thread overview]
Message-ID: <20080910151245.GC18644@wotan.suse.de> (raw)
In-Reply-To: <20080910123246.GA2564@elte.hu>

On Wed, Sep 10, 2008 at 02:32:46PM +0200, Ingo Molnar wrote:
> 
> here's another one found on another box:
> 
> [  574.380319] =======================================================
> [  574.380381] [ INFO: possible circular locking dependency detected ]
> [  574.380413] 2.6.27-rc6-tip #30918
> [  574.380440] -------------------------------------------------------
> [  574.380472] sshd/8255 is trying to acquire lock:
> [  574.380500]  (&sb->s_type->i_mutex_key#9){--..}, at: [<ffffffff802d5aab>] do_truncate+0x59/0x83
> [  574.380628] 
> [  574.380629] but task is already holding lock:
> [  574.380679]  (&mm->mmap_sem){----}, at: [<ffffffff80249775>] sys32_mmap2+0x64/0xa7
> [  574.380781] 
> [  574.380781] which lock already depends on the new lock.
> [  574.380782] 
> [  574.380857] 
> [  574.380857] the existing dependency chain (in reverse order) is:
> [  574.380910] 
> [  574.380911] -> #1 (&mm->mmap_sem){----}:
> [  574.381025]        [<ffffffff80281979>] __lock_acquire+0x9b4/0xb3b
> [  574.381081]        [<ffffffff80282499>] lock_acquire+0x8d/0xba
> [  574.381219]        [<ffffffff802a94ff>] iov_iter_fault_in_readable+0x84/0x169
> [  574.381359]        [<ffffffff802aae18>] generic_file_buffered_write+0x119/0x5ad
> [  574.381584]        [<ffffffff802ab6cb>] __generic_file_aio_write_nolock+0x260/0x294
> [  574.381809]        [<ffffffff802ab768>] generic_file_aio_write+0x69/0xc5
> [  574.381948]        [<ffffffff802d68e2>] do_sync_write+0xeb/0x132
> [  574.382086]        [<ffffffff802d6f28>] vfs_write+0xa7/0xe1
> [  574.382222]        [<ffffffff802d701c>] sys_write+0x47/0x6d
> [  574.382359]        [<ffffffff802481b7>] cstar_dispatch+0x7/0x4b
> [  574.382496]        [<ffffffffffffffff>] 0xffffffffffffffff
> [  574.382635] 
> [  574.382636] -> #0 (&sb->s_type->i_mutex_key#9){--..}:
> [  574.382942]        [<ffffffff8028181b>] __lock_acquire+0x856/0xb3b
> [  574.383080]        [<ffffffff80282499>] lock_acquire+0x8d/0xba
> [  574.383218]        [<ffffffff80b77600>] __mutex_lock_common+0xe4/0x333
> [  574.383358]        [<ffffffff80b778e9>] mutex_lock_nested+0x30/0x35
> [  574.383495]        [<ffffffff802d5aab>] do_truncate+0x59/0x83
> [  574.383633]        [<ffffffff802cbbf7>] shmem_file_setup+0xcf/0x106
> [  574.383772]        [<ffffffff802cbc50>] shmem_zero_setup+0x22/0x5e
> [  574.383910]        [<ffffffff802bfc92>] mmap_region+0x250/0x438
> [  574.384031]        [<ffffffff802c047f>] do_mmap_pgoff+0x2fe/0x363
> [  574.384031]        [<ffffffff8024978e>] sys32_mmap2+0x7d/0xa7
> [  574.384031]        [<ffffffff802481b7>] cstar_dispatch+0x7/0x4b
> [  574.384031]        [<ffffffffffffffff>] 0xffffffffffffffff
> [  574.384031] 
> [  574.384031] other info that might help us debug this:
> [  574.384031] 
> [  574.384031] 1 lock held by sshd/8255:
> [  574.384031]  #0:  (&mm->mmap_sem){----}, at: [<ffffffff80249775>] sys32_mmap2+0x64/0xa7
> [  574.384031] 
> [  574.384031] stack backtrace:
> [  574.384031] Pid: 8255, comm: sshd Not tainted 2.6.27-rc6-tip #30918
> [  574.384031] Call Trace:
> [  574.384031]  [<ffffffff80280fba>] print_circular_bug_tail+0x71/0x7c
> [  574.384031]  [<ffffffff8028181b>] __lock_acquire+0x856/0xb3b
> [  574.384031]  [<ffffffff80282499>] lock_acquire+0x8d/0xba
> [  574.384031]  [<ffffffff802d5aab>] ? do_truncate+0x59/0x83
> [  574.384031]  [<ffffffff80b77600>] __mutex_lock_common+0xe4/0x333
> [  574.384031]  [<ffffffff802d5aab>] ? do_truncate+0x59/0x83
> [  574.384031]  [<ffffffff802d5aab>] ? do_truncate+0x59/0x83
> [  574.384031]  [<ffffffff804e475f>] ? _raw_spin_unlock+0x8e/0x93
> [  574.384031]  [<ffffffff80b778e9>] mutex_lock_nested+0x30/0x35
> [  574.384031]  [<ffffffff802d5aab>] do_truncate+0x59/0x83
> [  574.384031]  [<ffffffff802d7c1f>] ? init_file+0x99/0xbb
> [  574.384031]  [<ffffffff802d7deb>] ? alloc_file+0x3e/0x4e
> [  574.384031]  [<ffffffff802cbbf7>] shmem_file_setup+0xcf/0x106
> [  574.384031]  [<ffffffff802cbc50>] shmem_zero_setup+0x22/0x5e
> [  574.384031]  [<ffffffff802bfc92>] mmap_region+0x250/0x438
> [  574.384031]  [<ffffffff802282aa>] ? arch_get_unmapped_area_topdown+0x192/0x294
> [  574.384031]  [<ffffffff802c047f>] do_mmap_pgoff+0x2fe/0x363
> [  574.384031]  [<ffffffff8024978e>] sys32_mmap2+0x7d/0xa7
> [  574.384031]  [<ffffffff802481b7>] cstar_dispatch+0x7/0x4b

Oh, nice one.

It had me scratching my head until I realised you must be using tiny shmem.

Patch attached (which brings closely into line with shmem)

--

Index: linux-2.6/mm/tiny-shmem.c
===================================================================
--- linux-2.6.orig/mm/tiny-shmem.c
+++ linux-2.6/mm/tiny-shmem.c
@@ -65,31 +65,25 @@ struct file *shmem_file_setup(char *name
 	if (!dentry)
 		goto put_memory;
 
+        error = -ENFILE;
+        file = get_empty_filp();
+        if (!file)
+                goto put_dentry;
+
 	error = -ENOSPC;
 	inode = ramfs_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0);
 	if (!inode)
-		goto put_dentry;
-
-	d_instantiate(dentry, inode);
-	error = -ENFILE;
-	file = alloc_file(shm_mnt, dentry, FMODE_WRITE | FMODE_READ,
-			&ramfs_file_operations);
-	if (!file)
-		goto put_dentry;
-
-	inode->i_nlink = 0;	/* It is unlinked */
-
-	/* notify everyone as to the change of file size */
-	error = do_truncate(dentry, size, 0, file);
-	if (error < 0)
 		goto close_file;
 
+        d_instantiate(dentry, inode);
+        inode->i_size = size;
+        inode->i_nlink = 0;     /* It is unlinked */
+        init_file(file, shm_mnt, dentry, FMODE_WRITE | FMODE_READ,
+                        &ramfs_file_operations);
 	return file;
 
 close_file:
 	put_filp(file);
-	return ERR_PTR(error);
-
 put_dentry:
 	dput(dentry);
 put_memory:

  reply	other threads:[~2008-09-10 15:12 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-10 11:37 Nick Piggin
2008-09-10 11:41 ` Peter Zijlstra
2008-09-10 11:47   ` Ingo Molnar
2008-09-10 11:50     ` Ingo Molnar
2008-09-10 12:12     ` Ingo Molnar
2008-09-10 12:32       ` Ingo Molnar
2008-09-10 15:12         ` Nick Piggin [this message]
2008-09-10 14:48       ` Nick Piggin
2008-09-10 15:01         ` Peter Zijlstra
2008-09-10 15:17           ` Nick Piggin
2008-09-10 15:26           ` Nick Piggin
2008-09-11  8:27             ` Ingo Molnar
2008-09-11 10:43               ` Nick Piggin
2008-09-12  9:24                 ` [PATCH] sysfs: fix deadlock Ingo Molnar
2008-09-14 22:02                   ` Nick Piggin
2008-09-15  9:15                     ` Peter Zijlstra
2008-09-14  7:39               ` [lockdep] possible circular locking, between &mm->mmap_sem and &dev->ev_mutex Ingo Molnar
2008-09-14  7:44                 ` Andrew Morton
2008-09-14  8:06                   ` [patch] mm: fix locking, inotify_read's ev_mutex vs do_page_fault's mmap_sem Ingo Molnar
2008-09-14 22:12                     ` [patch] mm: tiny-shmem fix lor, mmap_sem vs i_mutex Nick Piggin
2008-09-17 20:14                       ` Andrew Morton
2008-09-17 20:46                         ` Matt Mackall
2008-09-18 11:12                         ` Ingo Molnar
2008-09-18 19:29                           ` Jeremy Fitzhardinge
2008-09-18 21:11                             ` Matt Mackall
2008-09-20  2:18                               ` Dave Hansen
2008-09-20 16:12                                 ` Hugh Dickins
2008-09-22 15:14                                   ` Dave Hansen
2008-09-22 14:54                                 ` David Howells
2008-09-23  5:32                                   ` Nick Piggin
2008-09-24 19:29                                     ` Hugh Dickins
2008-09-24 19:47                                       ` Andrew Morton
2008-09-24 18:18                                   ` David Howells
2008-09-24 18:29                                     ` Matt Mackall
2008-09-24 19:41                                       ` Hugh Dickins
2008-09-24 19:59                                       ` David Howells
2008-09-24 23:43                                         ` Hugh Dickins
2008-09-24 18:56                                     ` David Howells
2008-09-24 19:11                                       ` Matt Mackall
2008-09-24 19:26                                       ` David Howells
2008-09-19  8:40                             ` Ingo Molnar
2008-09-14 21:36                   ` [lockdep] possible circular locking, between &mm->mmap_sem and &dev->ev_mutex Nick Piggin
2008-09-10 14:30     ` [patch] x86: some lock annotations for user copy paths Nick Piggin
2008-09-10 14:31 ` Andi Kleen

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=20080910151245.GC18644@wotan.suse.de \
    --to=npiggin@suse.de \
    --cc=a.p.zijlstra@chello.nl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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

Powered by JetHome