Full buffer cache not working properly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I run several times the following test and what I've seen is that when the buffer cache becomes full, unneeded dirty buffer heads are not evicted and no other memory allocation can happen (including reading a block from the disk to the buffer cache). Should this happen?
Here's the code that reproduces this issue:

for(i = 0; i < get_capacity(bdev->bd_disk)/8; i++) {
       bh = __bread(bdev, i, PAGE_SIZE);
       lock_buffer(bh);
       memset(bh->b_data, 0, PAGE_SIZE);
       set_buffer_dirty(bh);
       unlock_buffer(bh);
       __brelse(bh);
}

I added some printks printing the buffer head's reference counter: after the '__bread' ref count is 2, after '__brelse' ref count is 1. Shouldn't these numbers be 1 and 0 respectively? I added an extra 'put_bh' before (or after) the '__brelse' but I get a BUG().
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux