All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jay <jinshan.xiong@whamcloud.com>
To: linux-kernel@vger.kernel.org
Subject: is this a bug?
Date: Wed, 23 Mar 2011 17:46:56 -0700	[thread overview]
Message-ID: <AANLkTikipA3__OX3sZd-VBS2Hvg5BSE=B9s+0RTyiVVQ@mail.gmail.com> (raw)

Hi,

Assuming vmscan is doing its job to steal the last page from an
inode's namespace, so:

shrink_page_list -> remove_mapping -> __remove_from_page_cache:

void __remove_from_page_cache(struct page *page)

{

        ...

        radix_tree_delete(&mapping->page_tree, page->index);

        page->mapping = NULL;

>>> after removing the page from radix tree, it stuck at here.

        mapping->nrpages--;

        ...

}

then another process just calls iput_final to release the inode, so
iput_final -> evict:

static void evict(struct inode *inode)

{

       ...

        } else {

                if (inode->i_data.nrpages)

>>> here it finds that nrpage is 1, so go into truncate_inode_pages() but it won't find any page in the page tree.

                        truncate_inode_pages(&inode->i_data, 0);

>>> here nrpages remains 1.

                end_writeback(inode);

>>> hit  BUG_ON(inode->i_data.nrpages) in end_writeback().

        }

        ...

}

The root cause of this problem is that nrpages is accessed w/o holding
mapping->page_tree. The fix is also easy, just grab ->tree_lock inside
truncate_inode_pages_range:

+       spin_lock_irq(&mapping->tree_lock);

-         if (mapping->nrpages == 0)

+        if (mapping->nrpages == 0) {

+               spin_unlock_irq(&mapping->tree_lock);

                return;

+        }

+        spin_unlock_irq(&mapping->tree_lock);

Am I missed anything?

Thanks

             reply	other threads:[~2011-03-24  0:46 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-24  0:46 Jay [this message]
2011-03-25 15:18 ` is this a bug? Steven Rostedt
  -- strict thread matches above, loose matches on Subject: below --
2017-06-21  3:08 Is " Peter Teoh
2013-02-19  9:32 David Wade
2013-02-19  9:42 ` Andreas Ericsson
2013-02-19  9:47 ` Erik Faye-Lund
2013-02-19 11:02   ` Duy Nguyen
2013-02-22 19:29     ` Phil Hord
2013-02-22 21:48       ` Junio C Hamano
2011-06-21 21:57 Is this a Bug? Christian Deussen
2011-06-21 22:49 ` Greg Freemyer
2011-06-22  7:28   ` Wilson Felipe
2011-06-22 19:50     ` julie Sullivan
2011-06-22 21:21       ` julie Sullivan
2011-06-23 12:16         ` Christian D.
2011-06-23 13:03           ` Jonathan Neuschäfer
2011-06-23 18:49 ` Jonathan Neuschäfer
2011-04-02  8:05 Is this a bug? Ding Dinghua
2011-04-02 16:32 ` Amir Goldstein
2011-04-03  9:24   ` Ding Dinghua
2011-04-03 14:51     ` Yongqiang Yang
2011-04-03 15:44       ` Amir Goldstein
2005-08-20  0:14 is this a bug ? Ashwin Chaugule
2005-08-19 13:19 ` Thomas Gleixner
2005-08-20  1:36   ` Ashwin Chaugule
2005-08-19 18:25     ` Thomas Gleixner
2005-08-19 19:31       ` ashwinc
2002-07-15 13:57 Is this a bug? Tisserand Patrice
2002-07-15 14:08 ` Takashi Iwai
2001-08-07 11:51 is " Thodoris Pitikaris
2001-08-07 13:51 ` Andrzej Krzysztofowicz
2001-08-08  2:19 ` Dr. Kelsey Hudson
2001-08-08  3:15   ` J Sloan
2001-08-08  3:45     ` Dr. Kelsey Hudson
2001-08-08 10:53       ` David Weinehall
2001-08-08 11:05   ` Alan Cox
2001-08-08 12:59   ` Ron Flory
2001-08-08 16:51 ` jury gerold
2001-08-10  9:12   ` Eric W. Biederman
2001-08-10 12:22     ` jury gerold
2001-08-10 16:22       ` Eric W. Biederman

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='AANLkTikipA3__OX3sZd-VBS2Hvg5BSE=B9s+0RTyiVVQ@mail.gmail.com' \
    --to=jinshan.xiong@whamcloud.com \
    --cc=linux-kernel@vger.kernel.org \
    /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.