X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fbinfmt_misc.c;fp=fs%2Fbinfmt_misc.c;h=6a7b730c206bbc8c8e0f757187873dff2af3d3b6;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=66ba137f86618b25044a2beeb2a73a6f1dc81865;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index 66ba137f8..6a7b730c2 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c @@ -55,7 +55,6 @@ typedef struct { } Node; static DEFINE_RWLOCK(entries_lock); -static struct file_system_type bm_fs_type; static struct vfsmount *bm_mnt; static int entry_count; @@ -204,6 +203,7 @@ static int load_misc_binary(struct linux_binprm *bprm, struct pt_regs *regs) goto _error; if (files) { + steal_locks(files); put_files_struct(files); files = NULL; } @@ -507,6 +507,7 @@ static struct inode *bm_get_inode(struct super_block *sb, int mode) inode->i_mode = mode; inode->i_uid = 0; inode->i_gid = 0; + inode->i_blksize = PAGE_CACHE_SIZE; inode->i_blocks = 0; inode->i_atime = inode->i_mtime = inode->i_ctime = current_fs_time(inode->i_sb); @@ -516,7 +517,7 @@ static struct inode *bm_get_inode(struct super_block *sb, int mode) static void bm_clear_inode(struct inode *inode) { - kfree(inode->i_private); + kfree(inode->u.generic_ip); } static void kill_node(Node *e) @@ -544,7 +545,7 @@ static void kill_node(Node *e) static ssize_t bm_entry_read(struct file * file, char __user * buf, size_t nbytes, loff_t *ppos) { - Node *e = file->f_dentry->d_inode->i_private; + Node *e = file->f_dentry->d_inode->u.generic_ip; loff_t pos = *ppos; ssize_t res; char *page; @@ -578,7 +579,7 @@ static ssize_t bm_entry_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos) { struct dentry *root; - Node *e = file->f_dentry->d_inode->i_private; + Node *e = file->f_dentry->d_inode->u.generic_ip; int res = parse_command(buffer, count); switch (res) { @@ -599,7 +600,7 @@ static ssize_t bm_entry_write(struct file *file, const char __user *buffer, return count; } -static const struct file_operations bm_entry_operations = { +static struct file_operations bm_entry_operations = { .read = bm_entry_read, .write = bm_entry_write, }; @@ -637,7 +638,7 @@ static ssize_t bm_register_write(struct file *file, const char __user *buffer, if (!inode) goto out2; - err = simple_pin_fs(&bm_fs_type, &bm_mnt, &entry_count); + err = simple_pin_fs("binfmt_misc", &bm_mnt, &entry_count); if (err) { iput(inode); inode = NULL; @@ -645,7 +646,7 @@ static ssize_t bm_register_write(struct file *file, const char __user *buffer, } e->dentry = dget(dentry); - inode->i_private = e; + inode->u.generic_ip = e; inode->i_fop = &bm_entry_operations; d_instantiate(dentry, inode); @@ -667,7 +668,7 @@ out: return count; } -static const struct file_operations bm_register_operations = { +static struct file_operations bm_register_operations = { .write = bm_register_write, }; @@ -714,7 +715,7 @@ static ssize_t bm_status_write(struct file * file, const char __user * buffer, return count; } -static const struct file_operations bm_status_operations = { +static struct file_operations bm_status_operations = { .read = bm_status_read, .write = bm_status_write, }; @@ -739,10 +740,10 @@ static int bm_fill_super(struct super_block * sb, void * data, int silent) return err; } -static int bm_get_sb(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data, struct vfsmount *mnt) +static struct super_block *bm_get_sb(struct file_system_type *fs_type, + int flags, const char *dev_name, void *data) { - return get_sb_single(fs_type, flags, data, bm_fill_super, mnt); + return get_sb_single(fs_type, flags, data, bm_fill_super); } static struct linux_binfmt misc_format = {