1 --- rpm/build/kernel-2.4.9/linux/include/linux/fs.h Mon Nov 5 22:20:00 2001
2 +++ linux/include/linux/fs.h Mon Nov 5 22:24:09 2001
4 extern int register_filesystem(struct file_system_type *);
5 extern int unregister_filesystem(struct file_system_type *);
6 extern struct vfsmount *kern_mount(struct file_system_type *);
7 +struct vfsmount *do_kern_mount(char *type, int flags, char *name, void *data);
8 extern int may_umount(struct vfsmount *);
9 extern long do_mount(char *, char *, char *, unsigned long, void *);
12 extern ssize_t generic_file_read(struct file *, char *, size_t, loff_t *);
13 extern ssize_t generic_file_write(struct file *, const char *, size_t, loff_t *);
14 extern void do_generic_file_read(struct file *, loff_t *, read_descriptor_t *, read_actor_t, int);
15 +ssize_t do_generic_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos, int (*actor)(char *, char *, size_t ));
17 extern ssize_t generic_read_dir(struct file *, char *, size_t, loff_t *);
18 extern loff_t generic_file_llseek(struct file *, loff_t, int);
19 --- rpm/build/kernel-2.4.9/linux/kernel/ksyms.c Mon Nov 5 22:20:00 2001
20 +++ linux/kernel/ksyms.c Mon Nov 5 22:29:41 2001
22 EXPORT_SYMBOL(do_generic_file_read);
23 EXPORT_SYMBOL(flush_inode_pages);
24 EXPORT_SYMBOL(generic_file_write);
25 +EXPORT_SYMBOL(do_generic_file_write);
26 EXPORT_SYMBOL(generic_file_mmap);
27 EXPORT_SYMBOL(generic_ro_fops);
28 EXPORT_SYMBOL(generic_buffer_fdatasync);
30 EXPORT_SYMBOL(__pollwait);
31 EXPORT_SYMBOL(poll_freewait);
32 EXPORT_SYMBOL(ROOT_DEV);
33 +//EXPORT_SYMBOL(pagecache_lock);
34 EXPORT_SYMBOL(__find_get_page);
35 EXPORT_SYMBOL(__find_lock_page);
36 EXPORT_SYMBOL(find_get_page_simple);
38 EXPORT_SYMBOL(register_filesystem);
39 EXPORT_SYMBOL(unregister_filesystem);
40 EXPORT_SYMBOL(kern_mount);
41 +EXPORT_SYMBOL(do_kern_mount);
42 EXPORT_SYMBOL(__mntput);
43 EXPORT_SYMBOL(may_umount);
45 --- rpm/build/kernel-2.4.9/linux/mm/filemap.c Mon Nov 5 22:20:00 2001
46 +++ linux/mm/filemap.c Mon Nov 5 22:16:57 2001
51 -generic_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
52 +do_generic_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos, int (*actor)(char *, char *, size_t ))
54 struct inode *inode = file->f_dentry->d_inode;
55 struct address_space *mapping = inode->i_mapping;
56 @@ -2686,8 +2686,10 @@
61 if (!access_ok(VERIFY_READ, buf, count))
67 @@ -2794,10 +2796,12 @@
68 * same page as we're writing to, without it being marked
72 { volatile unsigned char dummy;
73 __get_user(dummy, buf);
74 __get_user(dummy, buf+bytes-1);
78 status = -ENOMEM; /* we'll assign it later anyway */
79 page = __grab_cache_page(mapping, index, &cached_page);
83 kaddr = page_address(page);
84 - page_fault = __copy_from_user(kaddr+offset, buf, bytes);
85 + page_fault = actor(kaddr+offset, buf, bytes);
86 flush_dcache_page(page);
87 status = mapping->a_ops->commit_write(file, page, offset, offset+bytes);
89 @@ -2870,6 +2874,21 @@
90 vmtruncate(inode, inode->i_size);
94 +static inline int actor_from_user(char *dst, char *src, size_t len)
96 + if (!access_ok(VERIFY_READ, src, len))
99 + return __copy_from_user(dst, src, len);
103 +generic_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
105 + return do_generic_file_write(file, buf, count, ppos, &actor_from_user);
109 void __init page_cache_init(unsigned long mempages)