From: Stefan Kleijkers <stefan@unilogicnetworks.net>
To: Josef Bacik <josef@redhat.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: WARNING: at fs/btrfs/inode.c:2198 btrfs_orphan_commit_root+0xa8/0xc0
Date: Sat, 26 Nov 2011 15:14:37 +0100 [thread overview]
Message-ID: <4ED0F44D.3070001@unilogicnetworks.net> (raw)
In-Reply-To: <20111118195226.GB1811@localhost.localdomain>
Hello Josef,
I've new results, is this the trace you are looking for?
Trace of OSD0: http://pastebin.com/gddLBXE4
Dmesg of OSD0: http://pastebin.com/Uebzgkjv
OSD1 crashed a while later with the same messages.
Stefan
On 11/18/2011 08:52 PM, Josef Bacik wrote:
> On Tue, Nov 15, 2011 at 09:19:12PM +0100, Stefan Kleijkers wrote:
>> Hello Josef,
>>
>> You can find the complete dmesg paste on: http://pastebin.com/R4dFfSdQ
>>
>> But I doubt it will add more information.
>>
> Sorry I forgot about you :). Here is a new debug patch, it will print something
> out right before it panics so make sure to get that info, and it will also be
> spitting stuff out to the trace buffer. So make sure you have tracing enabled,
> usually distros mount debugfs so you can cd /sys/kernel/debug/tracing and cat
> trace and you should see something. When it panics cat trace> somefile and
> send me the file and the dmesg so I can figure out what went wrong. Thanks,
>
> Josef
>
>
> diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
> index 24cfd10..d887608 100644
> --- a/fs/btrfs/extent-tree.c
> +++ b/fs/btrfs/extent-tree.c
> @@ -3762,6 +3762,11 @@ static void block_rsv_release_bytes(struct btrfs_block_rsv *block_rsv,
> spin_lock(&block_rsv->lock);
> if (num_bytes == (u64)-1)
> num_bytes = block_rsv->size;
> + if (unlikely(block_rsv->size< num_bytes)) {
> + printk(KERN_ERR "block rsv %p has size %Lu, want to take "
> + "away %Lu\n", block_rsv, block_rsv->size, num_bytes);
> + BUG();
> + }
> block_rsv->size -= num_bytes;
> if (block_rsv->reserved>= block_rsv->size) {
> num_bytes = block_rsv->reserved - block_rsv->size;
> @@ -4064,6 +4069,8 @@ int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
> * when we are truly done with the orphan item.
> */
> u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
> + trace_printk("Reserved %Lu bytes for inode %Lu on rsv %p\n",
> + num_bytes, btrfs_ino(inode), dst_rsv);
> return block_rsv_migrate_bytes(src_rsv, dst_rsv, num_bytes);
> }
>
> @@ -4071,6 +4078,8 @@ void btrfs_orphan_release_metadata(struct inode *inode)
> {
> struct btrfs_root *root = BTRFS_I(inode)->root;
> u64 num_bytes = btrfs_calc_trans_metadata_size(root, 1);
> + trace_printk("Releaseing %Lu bytes for inode %Lu on rsv %p\n",
> + num_bytes, btrfs_ino(inode), root->orphan_block_rsv);
> btrfs_block_rsv_release(root, root->orphan_block_rsv, num_bytes);
> }
>
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index e16215f..38a4efb 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -1994,6 +1994,8 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
>
> spin_lock(&root->orphan_lock);
> if (!root->orphan_block_rsv) {
> + trace_printk("Added new orphan rsv %p for root %Lu\n",
> + block_rsv, root->objectid);
> root->orphan_block_rsv = block_rsv;
> } else if (block_rsv) {
> btrfs_free_block_rsv(root, block_rsv);
> @@ -2002,6 +2004,8 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
>
> if (list_empty(&BTRFS_I(inode)->i_orphan)) {
> list_add(&BTRFS_I(inode)->i_orphan,&root->orphan_list);
> + trace_printk("Added inode %Lu to orphan list for %Lu\n",
> + btrfs_ino(inode), root->objectid);
> #if 0
> /*
> * For proper ENOSPC handling, we should do orphan
> @@ -2019,6 +2023,9 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
> if (!BTRFS_I(inode)->orphan_meta_reserved) {
> BTRFS_I(inode)->orphan_meta_reserved = 1;
> reserve = 1;
> + } else {
> + trace_printk("Didn't do reservation for inode %Lu on %Lu\n",
> + btrfs_ino(inode), root->objectid);
> }
> spin_unlock(&root->orphan_lock);
>
> @@ -2056,6 +2063,8 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode)
>
> spin_lock(&root->orphan_lock);
> if (!list_empty(&BTRFS_I(inode)->i_orphan)) {
> + trace_printk("Removed inode %Lu from orphan list for %Lu\n",
> + btrfs_ino(inode), root->objectid);
> list_del_init(&BTRFS_I(inode)->i_orphan);
> delete_item = 1;
> }
> @@ -2063,6 +2072,9 @@ int btrfs_orphan_del(struct btrfs_trans_handle *trans, struct inode *inode)
> if (BTRFS_I(inode)->orphan_meta_reserved) {
> BTRFS_I(inode)->orphan_meta_reserved = 0;
> release_rsv = 1;
> + } else {
> + trace_printk("Inode %Lu didn't release metadata\n",
> + btrfs_ino(inode));
> }
> spin_unlock(&root->orphan_lock);
>
next prev parent reply other threads:[~2011-11-26 14:14 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-09 10:24 WARNING: at fs/btrfs/inode.c:2198 btrfs_orphan_commit_root+0xa8/0xc0 Stefan Kleijkers
2011-11-09 14:01 ` Christian Brunner
2011-11-09 15:35 ` Josef Bacik
2011-11-10 12:13 ` Stefan Kleijkers
2011-11-14 16:03 ` Josef Bacik
2011-11-15 19:13 ` Stefan Kleijkers
2011-11-15 19:29 ` Josef Bacik
2011-11-18 19:30 ` Stefan Kleijkers
[not found] ` <4EC2C940.40605@unilogicnetworks.net>
2011-11-18 19:52 ` Josef Bacik
2011-11-26 14:14 ` Stefan Kleijkers [this message]
2011-11-26 21:21 ` Christian Brunner
2011-12-01 15:14 ` Josef Bacik
2011-12-01 20:03 ` Stefan Kleijkers
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=4ED0F44D.3070001@unilogicnetworks.net \
--to=stefan@unilogicnetworks.net \
--cc=josef@redhat.com \
--cc=linux-btrfs@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.