From 9aa743989a2731155c4eab69a0ffc3810dfa0e4c Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh-Weinraub Date: Fri, 25 Jan 2008 23:25:44 +0200 Subject: [PATCH] some reduction in stack space --- src/kernel/file.c | 4 ++-- src/kernel/inode.c | 2 +- src/kernel/super.c | 13 ++++++++----- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/kernel/file.c b/src/kernel/file.c index a1be5f32f393c..27884a293428a 100644 --- a/src/kernel/file.c +++ b/src/kernel/file.c @@ -246,13 +246,13 @@ ssize_t ceph_silly_write(struct file *file, const char __user * data, return ret; } + spin_lock(&inode->i_lock); if (*offset > inode->i_size) { ci->i_wr_size = inode->i_size = *offset; - spin_lock(&inode->i_lock); inode->i_blocks = (inode->i_size + 512 - 1) >> 9; - spin_unlock(&inode->i_lock); dout(10, "extending file size to %d\n", (int)inode->i_size); } + spin_unlock(&inode->i_lock); invalidate_inode_pages2(inode->i_mapping); return ret; } diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 2929492f8a332..2348362752b1f 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -48,9 +48,9 @@ int ceph_fill_inode(struct inode *inode, struct ceph_mds_reply_inode *info) inode->i_uid = le32_to_cpu(info->uid); inode->i_gid = le32_to_cpu(info->gid); inode->i_nlink = le32_to_cpu(info->nlink); - inode->i_size = le64_to_cpu(info->size); inode->i_rdev = le32_to_cpu(info->rdev); spin_lock(&inode->i_lock); + inode->i_size = le64_to_cpu(info->size); inode->i_blocks = 1; spin_unlock(&inode->i_lock); diff --git a/src/kernel/super.c b/src/kernel/super.c index 86f9d2d346a15..9fcbce2be89a9 100644 --- a/src/kernel/super.c +++ b/src/kernel/super.c @@ -410,30 +410,32 @@ static int ceph_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, struct vfsmount *mnt) { struct super_block *sb; - struct ceph_mount_args mount_args; + struct ceph_mount_args *mount_args; struct ceph_client *client; int err; int (*compare_super)(struct super_block *, void *) = ceph_compare_super; struct dentry *droot; dout(25, "ceph_get_sb\n"); + + mount_args = kmalloc(sizeof(struct ceph_mount_args), GFP_KERNEL); - err = parse_mount_args(flags, data, dev_name, &mount_args); + err = parse_mount_args(flags, data, dev_name, mount_args); if (err < 0) goto out; - if (mount_args.flags & CEPH_MOUNT_NOSHARE) + if (mount_args->flags & CEPH_MOUNT_NOSHARE) compare_super = 0; /* superblock */ - sb = sget(fs_type, compare_super, ceph_set_super, &mount_args); + sb = sget(fs_type, compare_super, ceph_set_super, mount_args); if (IS_ERR(sb)) { err = PTR_ERR(sb); goto out; } client = ceph_sb_to_client(sb); - if ((err = ceph_mount(client, &mount_args, &droot)) < 0) + if ((err = ceph_mount(client, mount_args, &droot)) < 0) goto out_splat; dout(30, "ceph_get_sb %p finishing\n", sb); @@ -448,6 +450,7 @@ out_splat: up_write(&sb->s_umount); deactivate_super(sb); out: + kfree(mount_args); dout(25, "ceph_get_sb fail %d\n", err); return err; } -- 2.39.5