Whamcloud - gitweb
Use req->page instead of req->addr inside echo_commitrw, as the latter is
[fs/lustre-release.git] / lustre / patches / patch-2.4.9-rh-ac13-xfs-1
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
3 @@ -1049,6 +1049,7 @@
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 *);
10  
11 @@ -1474,6 +1475,7 @@
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 ));
16  
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
21 @@ -246,6 +246,7 @@
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);
29 @@ -286,6 +287,7 @@
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);
37 @@ -371,6 +373,7 @@
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);
44  
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
47 @@ -2672,7 +2672,7 @@
48   *                                                     okir@monad.swb.de
49   */
50  ssize_t
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 ))
53  {
54         struct inode    *inode = file->f_dentry->d_inode; 
55         struct address_space *mapping = inode->i_mapping;
56 @@ -2686,8 +2686,10 @@
57  
58         cached_page = NULL;
59  
60 +#if 0
61         if (!access_ok(VERIFY_READ, buf, count))
62                 return -EFAULT;
63 +#endif
64                 
65         down(&inode->i_sem);
66  
67 @@ -2794,10 +2796,12 @@
68                  * same page as we're writing to, without it being marked
69                  * up-to-date.
70                  */
71 +#if 0
72                 { volatile unsigned char dummy;
73                         __get_user(dummy, buf);
74                         __get_user(dummy, buf+bytes-1);
75                 }
76 +#endif
77  
78                 status = -ENOMEM;       /* we'll assign it later anyway */
79                 page = __grab_cache_page(mapping, index, &cached_page);
80 @@ -2813,7 +2817,7 @@
81                 if (status)
82                         goto sync_failure;
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);
88                 if (page_fault)
89 @@ -2870,6 +2874,21 @@
90                 vmtruncate(inode, inode->i_size);
91         goto done;
92  }
93 +
94 +static inline int actor_from_user(char *dst, char *src, size_t len)
95 +{
96 +       if (!access_ok(VERIFY_READ, src, len))
97 +               return -EFAULT;
98 +               
99 +       return __copy_from_user(dst, src, len);
100 +}
101 +
102 +ssize_t
103 +generic_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
104 +{
105 +       return do_generic_file_write(file, buf, count, ppos, &actor_from_user);
106 +}
107 +
108  
109  void __init page_cache_init(unsigned long mempages)
110  {