> (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 <[email protected]>
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
- References:
- Realtime Preemption, 2.6.12, Beginners Guide?
- Re: Realtime Preemption, 2.6.12, Beginners Guide?
- Re: Realtime Preemption, 2.6.12, Beginners Guide?
- Re: Realtime Preemption, 2.6.12, Beginners Guide?
- Re: Realtime Preemption, 2.6.12, Beginners Guide?
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
|
|