Messages in this thread Patch in this message | | | Date | Sat, 9 Jul 2005 15:36:25 +0200 | From | Ingo Molnar <> | Subject | Re: Realtime Preemption, 2.6.12, Beginners Guide? |
| |
> (gdb) #################################### > (gdb) # c0169503, stack size: 408 bytes # > (gdb) #################################### > (gdb) 0xc0169503 is in blkdev_get (fs/block_dev.c:663).
---- this patch reduces the stack footprint of blkdev_get() from 408 bytes to 28 bytes. Build and boot-tested.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Index: linux/fs/block_dev.c =================================================================== --- linux.orig/fs/block_dev.c +++ linux/fs/block_dev.c @@ -667,14 +667,32 @@ int blkdev_get(struct block_device *bdev * For now, block device ->open() routine must _not_ * examine anything in 'inode' argument except ->i_rdev. */ - struct file fake_file = {}; - struct dentry fake_dentry = {}; - fake_file.f_mode = mode; - fake_file.f_flags = flags; - fake_file.f_dentry = &fake_dentry; - fake_dentry.d_inode = bdev->bd_inode; - - return do_open(bdev, &fake_file); + struct file *fake_file; + struct dentry *fake_dentry; + int err = -ENOMEM; + + fake_file = kmalloc(sizeof(*fake_file), GFP_KERNEL); + if (!fake_file) + goto out; + memset(fake_file, 0, sizeof(*fake_file)); + + fake_dentry = kmalloc(sizeof(*fake_dentry), GFP_KERNEL); + if (!fake_dentry) + goto out_free_file; + memset(fake_dentry, 0, sizeof(*fake_dentry)); + + fake_file->f_mode = mode; + fake_file->f_flags = flags; + fake_file->f_dentry = fake_dentry; + fake_dentry->d_inode = bdev->bd_inode; + + err = do_open(bdev, fake_file); + + kfree(fake_dentry); +out_free_file: + kfree(fake_file); +out: + return err; } EXPORT_SYMBOL(blkdev_get); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |