From: "Vladimir V. Saveliev" <vs@namesys.com>
To: Jonathan Briggs <jbriggs@esoft.com>
Cc: Reiserfs mail-list <Reiserfs-List@Namesys.COM>
Subject: Re: What did I do wrong? Oopses with 7-30 auto-snapshot
Date: Sat, 31 Jul 2004 17:13:00 +0400 [thread overview]
Message-ID: <410B9ADC.906@namesys.com> (raw)
In-Reply-To: <1091226640.3426.10.camel@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 1083 bytes --]
Hello
Jonathan Briggs wrote:
> I wanted to try out the latest even though I know it may not work.
> Either it doesn't work, or I did it wrong. I was hoping someone would
> know which.
>
> I've got a raid-0 device with a Reiser4 FS from March. When I tried to
> mount that after booting 2.6.8-rc2-mm1-reiser4 I got an Oops. I thought
> it might be a change in the disk structure so I got the latest (I think)
> reiser4 tools and tried creating a new FS and loop mounting it. That
> got me another, identical Oops.
>
> Here it is if anyone wants to look:
> Unable to handle kernel NULL pointer dereference at virtual address 00000004
> printing eip:
> c01b0df4
> *pde = 00000000
> Oops: 0000 [#1]
> Modules linked in: joydev evdev usbhid dm_mod ehci_hcd uhci_hcd usbcore
> CPU: 0
> EIP: 0060:[<c01b0df4>] Not tainted VLI
> EFLAGS: 00010286 (2.6.8-rc2-mm1)
> EIP is at clog_link_object+0x64/0xe0
> eax: 00000000 ebx: 00000000 ecx: c046d964 edx: c16e9dec
Oops, yes, sorry, it did not work when CONFIG_FRAME_POINTER is not set
The attached patch should fix that
[-- Attachment #2: cleanup-patch.diff --]
[-- Type: text/plain, Size: 8739 bytes --]
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2004/07/31 17:02:21+04:00 reiser4@tribesman.namesys.com
# append_and_or_overwrite: no page fault holding longterm lock
#
# plugin/item/extent_file_ops.c
# 2004/07/31 17:02:18+04:00 reiser4@tribesman.namesys.com +0 -14
# append_and_or_overwrite: no page fault holding longterm lock
#
# ChangeSet
# 2004/07/31 16:51:02+04:00 reiser4@tribesman.namesys.com
# cleanup
#
# txnmgr.c
# 2004/07/31 16:50:59+04:00 reiser4@tribesman.namesys.com +0 -22
# cleanup
#
# plugin/item/extent_file_ops.c
# 2004/07/31 16:50:58+04:00 reiser4@tribesman.namesys.com +0 -5
# cleanup
#
# plugin/file/file.c
# 2004/07/31 16:50:58+04:00 reiser4@tribesman.namesys.com +0 -4
# cleanup
#
# lock.c
# 2004/07/31 16:50:58+04:00 reiser4@tribesman.namesys.com +0 -2
# cleanup
#
# debug.h
# 2004/07/31 16:50:58+04:00 reiser4@tribesman.namesys.com +0 -2
# cleanup
#
# debug.c
# 2004/07/31 16:50:58+04:00 reiser4@tribesman.namesys.com +5 -44
# cleanup
#
# context.h
# 2004/07/31 16:50:58+04:00 reiser4@tribesman.namesys.com +1 -3
# cleanup
#
diff -Nru a/context.h b/context.h
--- a/context.h 2004-07-31 17:10:22 +04:00
+++ b/context.h 2004-07-31 17:10:22 +04:00
@@ -146,10 +146,8 @@
err_site err;
/* information about delayed stat data updates. See above. */
dirty_inode_info dirty;
-
- void *mjd_bt[6]; /* last mark jnode dirty backtrace */
- int count;
#endif
+
#if REISER4_TRACE
/* per-thread tracing flags. Use reiser4_trace_flags enum to set
bits in it. */
diff -Nru a/debug.c b/debug.c
--- a/debug.c 2004-07-31 17:10:22 +04:00
+++ b/debug.c 2004-07-31 17:10:22 +04:00
@@ -637,7 +637,6 @@
int op;
void *data1;
void *data2;
- unsigned long data[6];
} clog_t;
clog_t clog[CLOG_LENGTH];
@@ -672,39 +671,6 @@
spin_unlock(&clog_lock);
}
-/* this is to log lock/unlock */
-void
-clog_link_object(int op, void *data1, void *data2)
-{
- int idx;
-
- spin_lock(&clog_lock);
-
- if (clog_length == CLOG_LENGTH) {
- idx = clog_start;
- clog_start ++;
- clog_start %= CLOG_LENGTH;
- } else {
- idx = clog_length;
- assert("vs-1672", clog_start == 0);
- clog_length ++;
- }
-
- clog[idx].id = clog_id ++;
- clog[idx].op = op;
- clog[idx].pid = current->pid;
- clog[idx].data[0] = (unsigned long)__builtin_return_address(1);
- clog[idx].data[1] = (unsigned long)__builtin_return_address(2);
- clog[idx].data[2] = (unsigned long)__builtin_return_address(3);
- clog[idx].data[3] = (unsigned long)__builtin_return_address(4);
- clog[idx].data[4] = (unsigned long)__builtin_return_address(5);
- clog[idx].data[5] = (unsigned long)__builtin_return_address(6);
- clog[idx].data1 = data1;
- clog[idx].data2 = data2;
- spin_unlock(&clog_lock);
-}
-
-
static const char *
op2str(int op)
{
@@ -727,25 +693,19 @@
void
print_clog(void)
{
- int i, j, k;
+ int i, j;
j = clog_start;
for (i = 0; i < clog_length; i ++) {
- if (clog[j].op == LINK_OBJECT || clog[j].op == UNLINK_OBJECT) {
- printk("%d(%d): id %d: pid %d, op %s, locks %p [",
- i, j, clog[j].id, clog[j].pid, op2str(clog[j].op), clog[j].data1);
- for (k = 0; k < 6; k ++)
- print_symname(clog[j].data[k]);
- printk("]\n");
- } else
- printk("%d(%d): id %d: pid %d, op %s, data1 %p, data2 %p\n",
- i, j, clog[j].id, clog[j].pid, op2str(clog[j].op), clog[j].data1, clog[j].data2);
+ printk("%d(%d): id %d: pid %d, op %s, data1 %p, data2 %p\n",
+ i, j, clog[j].id, clog[j].pid, op2str(clog[j].op), clog[j].data1, clog[j].data2);
j ++;
j %= CLOG_LENGTH;
}
printk("clog length %d\n", clog_length);
}
+#if 0
void
print_symname(unsigned long address)
{
@@ -759,6 +719,7 @@
if (name != NULL)
printk(" %s[%lx/%lx]", name, offset, size);
}
+#endif
/* Make Linus happy.
Local variables:
diff -Nru a/debug.h b/debug.h
--- a/debug.h 2004-07-31 17:10:22 +04:00
+++ b/debug.h 2004-07-31 17:10:22 +04:00
@@ -543,9 +543,7 @@
#define OP_NUM 10
void clog_op(int op, void *, void *);
-void clog_link_object(int op, void *, void *);
void print_clog(void);
-void print_symname(unsigned long address);
/* __FS_REISER4_DEBUG_H__ */
#endif
diff -Nru a/lock.c b/lock.c
--- a/lock.c 2004-07-31 17:10:22 +04:00
+++ b/lock.c 2004-07-31 17:10:22 +04:00
@@ -273,7 +273,6 @@
assert("reiser4-4", ergo(locks_list_empty(&owner->locks), owner->nr_locks == 0));
locks_list_push_back(&owner->locks, handle);
owner->nr_locks ++;
- clog_link_object(LINK_OBJECT, node, (void *)owner->nr_locks);
owners_list_push_front(&node->lock.owners, handle);
handle->signaled = 0;
@@ -292,7 +291,6 @@
locks_list_remove_clean(handle);
handle->owner->nr_locks --;
assert("reiser4-6", ergo(locks_list_empty(&handle->owner->locks), handle->owner->nr_locks == 0));
- clog_link_object(UNLINK_OBJECT, handle->node, (void *)handle->owner->nr_locks);
owners_list_remove_clean(handle);
diff -Nru a/plugin/file/file.c b/plugin/file/file.c
--- a/plugin/file/file.c 2004-07-31 17:10:22 +04:00
+++ b/plugin/file/file.c 2004-07-31 17:10:22 +04:00
@@ -1472,8 +1472,6 @@
if (result)
return result;
- clog_op(READPAGE_IN, (void *)(unsigned long)get_inode_oid(inode), (void *)page->index);
-
/* get key of first byte of the page */
key_by_inode_unix_file(inode, (loff_t) page->index << PAGE_CACHE_SHIFT, &key);
@@ -1490,7 +1488,6 @@
if (PageUptodate(page)) {
done_lh(&lh);
unlock_page(page);
- clog_op(READPAGE_OUT, (void *)(unsigned long)get_inode_oid(inode), (void *)page->index);
return 0;
}
@@ -1535,7 +1532,6 @@
save_file_hint(file, &hint);
assert("vs-979", ergo(result == 0, (PageLocked(page) || PageUptodate(page))));
- clog_op(READPAGE_OUT, (void *)(unsigned long)get_inode_oid(inode), (void *)page->index);
return result;
}
diff -Nru a/plugin/item/extent_file_ops.c b/plugin/item/extent_file_ops.c
--- a/plugin/item/extent_file_ops.c 2004-07-31 17:10:22 +04:00
+++ b/plugin/item/extent_file_ops.c 2004-07-31 17:10:22 +04:00
@@ -626,8 +626,6 @@
/* offset within the page */
page_off = (unsigned long)(file_off & (PAGE_CACHE_SIZE - 1));
- clog_op(EXTENT_WRITE_IN, (void *)(unsigned long)oid, (void *)(unsigned long)file_off);
-
/* key of first byte of page */
page_key = flow->key;
set_key_offset(&page_key, (loff_t)page_nr << PAGE_CACHE_SHIFT);
@@ -644,7 +642,6 @@
write_page_log(inode->i_mapping, page_nr);
- clog_op(EXTENT_WRITE_IN2, (void *)get_current_lock_stack()->nr_locks, 0);
result = make_extent(&page_key, uf_coord, mode, &blocknr, &created, inode/* check quota */);
if (result) {
goto exit1;
@@ -720,7 +717,6 @@
assert("nikita-2104", lock_stack_isclean(get_current_lock_stack()));
/* copy user data into page */
- clog_op(EXTENT_WRITE_OUT2, (void *)get_current_lock_stack()->nr_locks, 0);
result = __copy_from_user((char *)kmap(page) + page_off, flow->data - count, count);
kunmap(page);
if (unlikely(result)) {
@@ -764,15 +760,6 @@
file_off += count;
set_key_offset(&page_key, (loff_t)page_nr << PAGE_CACHE_SHIFT);
- if (flow->length) {
- /* read in next portion of user buffer */
- size_t bytes;
-
- bytes = PAGE_CACHE_SIZE;
- if (bytes > flow->length)
- bytes = flow->length;
- fault_in_pages_readable(flow->data, bytes);
- }
continue;
exit3:
@@ -794,12 +781,6 @@
*/
} while (flow->length && uf_coord->valid == 1);
-/*
- if (flow->length)
- DQUOT_FREE_SPACE_NODIRTY(inode, flow->length);
-*/
-
- clog_op(EXTENT_WRITE_OUT, (void *)(unsigned long)oid, (void *)result);
return result;
}
diff -Nru a/txnmgr.c b/txnmgr.c
--- a/txnmgr.c 2004-07-31 17:10:22 +04:00
+++ b/txnmgr.c 2004-07-31 17:10:22 +04:00
@@ -2570,29 +2570,7 @@
JF_SET(node, JNODE_DIRTY);
get_current_context()->nr_marked_dirty ++;
-#if REISER4_DEBUG
- {
- reiser4_context *ctx;
- ctx = get_current_context();
- if (__builtin_return_address(0) == ctx->mjd_bt[0] &&
- __builtin_return_address(1) == ctx->mjd_bt[1] &&
- __builtin_return_address(2) == ctx->mjd_bt[2] &&
- __builtin_return_address(3) == ctx->mjd_bt[3] &&
- __builtin_return_address(4) == ctx->mjd_bt[4] &&
- __builtin_return_address(5) == ctx->mjd_bt[5]) {
- ctx->count ++;
- } else {
- ctx->mjd_bt[0] = __builtin_return_address(0);
- ctx->mjd_bt[1] = __builtin_return_address(1);
- ctx->mjd_bt[2] = __builtin_return_address(2);
- ctx->mjd_bt[3] = __builtin_return_address(3);
- ctx->mjd_bt[4] = __builtin_return_address(4);
- ctx->mjd_bt[5] = __builtin_return_address(5);
- ctx->count = 1;
- }
- }
-#endif
/* We grab2flush_reserve one additional block only if node was
not CREATED and jnode_flush did not sort it into neither
relocate set nor overwrite one. If node is in overwrite or
next prev parent reply other threads:[~2004-07-31 13:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-30 22:30 What did I do wrong? Oopses with 7-30 auto-snapshot Jonathan Briggs
2004-07-31 0:28 ` Maciejewski, Jake
2004-07-31 13:13 ` Vladimir V. Saveliev [this message]
2004-07-31 15:52 ` Maciejewski, Jake
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=410B9ADC.906@namesys.com \
--to=vs@namesys.com \
--cc=Reiserfs-List@Namesys.COM \
--cc=jbriggs@esoft.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.