From: Erwin Can Sar <csar@stanford.edu>
To: linux-fsdevel@vger.kernel.org
Subject: Inserting Into Buffer Cache
Date: Fri, 17 Dec 2004 04:19:23 -0800 [thread overview]
Message-ID: <1103285963.41c2cecb996cc@webmail.stanford.edu> (raw)
Hi,
I'm trying to write a driver that can insert a dirty buffer of data into its
buffer cache (for a research project). My block device has a sectorsize of
512 and 512 sectors. For some reason inserting into sector 0 works
correctly, but sector 1 does not work. What happens is that __getblk never
returns and it seems like it is looping forever. I think that the culprit
is the loop inside __getblk_slow that will loop forever if grow_buffer
keeps failing. The problematic call is:
bh = __getblk(bdev, 1, hardsect_size);
In order to figure out what's going on I've put more and more of that code
into my own driver, so that it is now:
static int sbd_temp(struct block_device *bdev)
{
struct buffer_head *bh;
bh = __find_get_block(bdev, 1, hardsect_size);
if(!bh) {
printk("Not Found\n");
if(!grow_buffers(bdev, 1, hardsect_size)) {
printk("Couldn't grow\n");
return -1;
}
}
brelse(bh);
return 0;
}
Unfortunately this leads to an OOPS:
------------[ cut here ]------------
Dec 17 13:05:13 ubuntu kernel: kernel BUG at fs/buffer.c:1619!
Dec 17 13:05:13 ubuntu kernel: invalid operand: 0000 [#1]
Dec 17 13:05:13 ubuntu kernel: PREEMPT
Dec 17 13:05:13 ubuntu kernel: Modules linked in: sbd proc_intf freq_table
cpufreq_userspace cpufreq_powersave ipv6 af_packet orinoco_cs orinoco
hermes ds button ac battery yenta_socket pcmcia_core e100 eepro100 mii
snd_intel8x0m snd_intel8x0 snd_ac97_codec snd_pcm_oss snd_mixer_oss snd_pcm
snd_timer snd_page_alloc gameport snd_mpu401_uart snd_rawmidi snd_seq_device
snd soundcore uhci_hcd usbcorepciehp shpchp pci_hotplug intel_agp agpgart
pcspkr rtc md dm_mod parport_pc lp p arport tsdev ide_cd joydev evdev cdrom
mousedev psmouse ext3 jbd ide_generic piix ide_disk ide_core unix fan
thermal processor
Dec 17 13:05:13 ubuntu kernel: CPU: 0
Dec 17 13:05:13 ubuntu kernel: EIP: 0060:[set_bh_page+23/54] Not
tainted
Dec 17 13:05:13 ubuntu kernel: EFLAGS: 00010216 (2.6.8.1)
Dec 17 13:05:13 ubuntu kernel: EIP is at set_bh_page+0x17/0x36
Dec 17 13:05:13 ubuntu kernel: eax: c108b700 ebx: c03358d0 ecx: c03358d0
e dx: 2f4da5f9
Dec 17 13:05:13 ubuntu kernel: esi: 2f4da5f9 edi: d0b26a07 ebp: 00000000
e sp: cd30be94
Dec 17 13:05:13 ubuntu kernel: ds: 007b es: 007b ss: 0068
Dec 17 13:05:13 ubuntu kernel: Process simple (pid: 4534,
threadinfo=cd30a000 task=c315c3f0)
Dec 17 13:05:13 ubuntu kernel: Stack: c0146874 c03358d0 c108b700 2f4da5f9
c108b700 00000001 00000000 d0b26a07
Dec 17 13:05:13 ubuntu kernel: c014698b c108b700 d0b26a07 00000000
00000001 00000000 00000000 d0b26a07
Dec 17 13:05:13 ubuntu kernel: c0148a5f cf561080 00000001 00000000
00000001 d0b26a07 00000001 00000200
Dec 17 13:05:13 ubuntu kernel: Call Trace:
Dec 17 13:05:13 ubuntu kernel: [create_buffers+88/144]
create_buffers+0x58/0x90Dec 17 13:05:13 ubuntu kernel:
[grow_dev_page+119/264] grow_dev_page+0x77/0x108Dec 17 13:05:13 ubuntu
kernel: [grow_buffers+79/148] grow_buffers+0x4f/0x94
Dec 17 13:05:13 ubuntu kernel: [__crc___bitmap_andnot+8756634/10939662]
sbd_temp+0x5f/0x81 [sbd]
Dec 17 13:05:13 ubuntu kernel: [__crc___bitmap_andnot+8757248/10939662]
sbd_ioctl+0x244/0x30b [sbd]
Dec 17 13:05:13 ubuntu kernel: [blkdev_ioctl+838/859]
blkdev_ioctl+0x346/0x35bDec 17 13:05:13 ubuntu kernel: [block_ioctl+26/30]
block_ioctl+0x1a/0x1e
Dec 17 13:05:13 ubuntu kernel: [sys_ioctl+461/532] sys_ioctl+0x1cd/0x214
Dec 17 13:05:13 ubuntu kernel: [sysenter_past_esp+82/113]
sysenter_past_esp+0x52/0x71
Dec 17 13:05:13 ubuntu kernel: Code: 0f 0b 53 06 22 e0 25 c0 2b 05 30 64 34
c0 c 1 f8 05 c1 e0 0c
Is there some problem with the way I am using __getblk? I've been spending a
lot of time on trying to figure this, but can't see what's wrong with my
code.
Thank you very much for your help,
Can Sar
reply other threads:[~2004-12-17 12:19 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=1103285963.41c2cecb996cc@webmail.stanford.edu \
--to=csar@stanford.edu \
--cc=linux-fsdevel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).