aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarsten Otte <cotte@de.ibm.com>2007-06-15 02:16:22 -0400
committerJens Axboe <jens.axboe@oracle.com>2007-07-10 02:04:15 -0400
commitd054fe3d10cc1f9aec01378c38caa32dffdd0090 (patch)
tree3c54ddbac87b25eb44526cf2ad4303f21dbe3cdd
parent932cc6d4f7c35bbf70bce8cc865b6033ff49c9c0 (diff)
xip sendfile removal
This patch removes xip_file_sendfile, the sendfile implementation for xip without replacement. Those customers that use xip on s390 are not using sendfile() as far as we know, and so far s390 is the only platform this could potentially be used on so far. Having sendfile is not a popular feature for execute in place file systems, however we have a working implementation of splice_read() based on fs/splice.c if anyone asks for it. At this point in time, it does not seem preferable to merge splice_read() for xip because it causes extra maintenence effort due to code duplication and it requires struct page behind the xip memory segment. We'd like to get rid of that in favor of supporting flash based embedded platforms (Monta Vista work) soon. Signed-off-by: Carsten Otte <cotte@de.ibm.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--fs/ext2/file.c1
-rw-r--r--include/linux/fs.h3
-rw-r--r--mm/filemap_xip.c22
3 files changed, 0 insertions, 26 deletions
diff --git a/fs/ext2/file.c b/fs/ext2/file.c
index 072a1909b2bc..04afeecaaef3 100644
--- a/fs/ext2/file.c
+++ b/fs/ext2/file.c
@@ -70,7 +70,6 @@ const struct file_operations ext2_xip_file_operations = {
70 .open = generic_file_open, 70 .open = generic_file_open,
71 .release = ext2_release_file, 71 .release = ext2_release_file,
72 .fsync = ext2_sync_file, 72 .fsync = ext2_sync_file,
73 .sendfile = xip_file_sendfile,
74}; 73};
75#endif 74#endif
76 75
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 87c1d3e9d6cb..894620e9402c 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1791,9 +1791,6 @@ extern int nonseekable_open(struct inode * inode, struct file * filp);
1791#ifdef CONFIG_FS_XIP 1791#ifdef CONFIG_FS_XIP
1792extern ssize_t xip_file_read(struct file *filp, char __user *buf, size_t len, 1792extern ssize_t xip_file_read(struct file *filp, char __user *buf, size_t len,
1793 loff_t *ppos); 1793 loff_t *ppos);
1794extern ssize_t xip_file_sendfile(struct file *in_file, loff_t *ppos,
1795 size_t count, read_actor_t actor,
1796 void *target);
1797extern int xip_file_mmap(struct file * file, struct vm_area_struct * vma); 1794extern int xip_file_mmap(struct file * file, struct vm_area_struct * vma);
1798extern ssize_t xip_file_write(struct file *filp, const char __user *buf, 1795extern ssize_t xip_file_write(struct file *filp, const char __user *buf,
1799 size_t len, loff_t *ppos); 1796 size_t len, loff_t *ppos);
diff --git a/mm/filemap_xip.c b/mm/filemap_xip.c
index fa360e566d88..65ffc321f0c0 100644
--- a/mm/filemap_xip.c
+++ b/mm/filemap_xip.c
@@ -159,28 +159,6 @@ xip_file_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
159} 159}
160EXPORT_SYMBOL_GPL(xip_file_read); 160EXPORT_SYMBOL_GPL(xip_file_read);
161 161
162ssize_t
163xip_file_sendfile(struct file *in_file, loff_t *ppos,
164 size_t count, read_actor_t actor, void *target)
165{
166 read_descriptor_t desc;
167
168 if (!count)
169 return 0;
170
171 desc.written = 0;
172 desc.count = count;
173 desc.arg.data = target;
174 desc.error = 0;
175
176 do_xip_mapping_read(in_file->f_mapping, &in_file->f_ra, in_file,
177 ppos, &desc, actor);
178 if (desc.written)
179 return desc.written;
180 return desc.error;
181}
182EXPORT_SYMBOL_GPL(xip_file_sendfile);
183
184/* 162/*
185 * __xip_unmap is invoked from xip_unmap and 163 * __xip_unmap is invoked from xip_unmap and
186 * xip_write 164 * xip_write