export iov_shorten for ext4's use
PATCH 1/1 export iov_shorten for ext4's use
ext4 needs to deal with 2 different max file offsets for block- and extent-allocated file formats, whereas the s_maxbytes scheme can only deal with one. So, for block-allocated files, we must catch and fix up too-large offsets from within the filesystem.
Having iov_shorten exported allows such things as:
if (pos + length > sbi->s_bitmap_maxbytes) {
nr_segs = iov_shorten((struct iovec *)iov, nr_segs,
sbi->s_bitmap_maxbytes - pos);
}to fix up too-large writes to these files in ext4_file_write().
This patch is currently living in the ext4 patch queue.
---
fs/read_write.c +2 -0
@@ -451,6 +451,8 @@ unsigned long iov_shorten(struct iovec *return seg; } +EXPORT_SYMBOL (iov_shorten); +ssize_t do_sync_readv_writev (struct file *filp,const struct iovec *iov,unsigned long nr_segs,size_t len,loff_t *ppos,iov_fn_t fn) {
(And, take 2... follow the coding style on export declarations...)
ext4 needs to deal with 2 different max file offsets for block- and extent-allocated file formats, whereas the s_maxbytes scheme can only deal with one. So, for block-allocated files, we must catch and fix up too-large offsets from within the filesystem.
Having iov_shorten exported allows such things as:
if (pos + length > sbi->s_bitmap_maxbytes) {
nr_segs = iov_shorten((struct iovec *)iov, nr_segs,
sbi->s_bitmap_maxbytes - pos);
}to fix up too-large writes to these files in ext4_file_write().
This patch is currently living in the ext4 patch queue.
---
fs/read_write.c +1 -0
@@ -450,6 +450,7 @@ unsigned long iov_shorten(struct iovec * }return seg; } +EXPORT_SYMBOL (iov_shorten) ssize_t do_sync_readv_writev(struct file *filp, const struct iovec *iov,unsigned long nr_segs,size_t len, loff_t *ppos, iov_fn_t fn)