buffer.c bug ? (was: Removable media bug)

Giuliano Pochini (pochini@denise.shiny.it)
Tue, 15 Jun 1999 19:26:49 MET DST


I added some debug line to sd.c:invalidate_buffers:

void invalidate_buffers(kdev_t dev)
{
int i;
int nlist;
struct buffer_head * bh;

for(nlist = 0; nlist < NR_LIST; nlist++) {
printk("invlist:%d\n",nlist);
bh = lru_list[nlist];
for (i = nr_buffers_type[nlist]*2 ; --i > 0 ; bh = bh->
b_next_free) {
if (bh->b_dev != dev)
continue;
wait_on_buffer(bh);
if (bh->b_dev != dev)
continue;
if (bh->b_count) printk("count: %d ",bh->b_count);
if (bh->b_count)
continue;
bh->b_flushtime = 0;
printk("inv ");
clear_bit(BH_Protected, &bh->b_state);
clear_bit(BH_Uptodate, &bh->b_state);
clear_bit(BH_Dirty, &bh->b_state);
clear_bit(BH_Req, &bh->b_state);
}
}
}

I do these steps:

insert a disk
mount
umount
eject
mount (without disk)

---------------------------------
[...]
invlist:0
invlist:1
invlist:2
invlist:0
invlist:1
invlist:2
invlist:0
invlist:1
invlist:2
invlist:0
invlist:1
invlist:2
invlist:0
invlist:1
invlist:2
invlist:0
inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv
inv inv inv inv inv inv inv inv inv inv inv inv inv inv
inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv
inv inv inv inv inv inv inv inv inv inv inv inv inv inv
inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv inv
invlist:1
inv inv invlist:2
invlist:0
inv count: 3 count: 3 count: 3 count: 3 count: 3 count: 3 count:
3 count: 3 count: 3 count: 3 count: 3 count: 3 count: 3 count: 3
count: 3 count: 3 inv count: 3 count: 3 count: 3 count: 3 count:
3 count: 3 count: 3 count: 3 count: 3 count: 3 count: 3 count: 3
count: 3 count: 3 count: 3 count: 3 invlist:1
invlist:2
sdb : READ CAPACITY failed.
sdb : status = 0, message = 00, host = 0, driver = 28
sdb : extended sense code = 2
sdb : block size assumed to be 512 bytes, disk size 1GB.
sdb:scsidisk I/O error: dev 08:10, sector 0
Dev 08:10: unable to read RDB block 0
scsidisk I/O error: dev 08:10, sector 0
08:10: error reading partition table
mount: /dev/sdb1 is not a valid block device
[Giu@localhost Giu]$
----------------------------------

I think it's very strange there still are used blocks (count!=0, so
they can't be invalidated) on a disk that has been unmounted and
ejected... Every time I repeat the steps above count is incremented by
1.

Bye.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/