lkml.org 
[lkml]   [2000]   [Feb]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 2.3.48] initrd fix (Mike Galbraith)
On Sun, 27 Feb 2000, Linus Torvalds wrote:

> Looks ok _except_ for this part that does
>
> - if (atomic_dec_and_test(&bdev->bd_openers)) {
> + if (atomic_dec_and_test(&bdev->bd_openers) && MAJOR(rdev) != RAMDISK_MAJOR) {
>
> in fs/block_dev.c..
>
> I see exactly what you're trying to do, I just disagree with it violently.
> I hate having these kinds of special cases in generic code - it turns them
> into non-generic code.
>
> It should be easily fixed in the initrd code itself, rather than in the
> generic code: turning it from a special case into a normal well-behaved
> case should be trivial. The way I would suggest is that initrd should just
> open the block device one extra time very early on, and then close the
> block device one extra time just before releasing all the initrd memory.
>
> Would you be willing to look at that solution instead?

Is this simple approach acceptable? If so, I'll cleanup and post.

rd.c:rd_init().. undo in rd_cleanup().
443 hardsect_size[MAJOR_NR] = rd_hardsec; /* Size of the RAM disk blo 444 blksize_size[MAJOR_NR] = rd_blocksizes; /* Avoid set_blocksize() 445
446 for (i = 0; i < NUM_RAMDISKS; i++) {
447 + struct block_device *bdev;
448 register_disk(NULL, MKDEV(MAJOR_NR,i), 1, &fd_fops, rd_size<<1);
449 + bdev = bdget(kdev_t_to_nr(MKDEV(MAJOR_NR,i)));
450 + atomic_inc(&bdev->bd_openers); /* avoid invalidate_buffers() */
451 }

-Mike


-
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/

\
 
 \ /
  Last update: 2005-03-22 13:56    [W:0.499 / U:0.060 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site