Commit 282dc178 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Al Viro

get rid of cont_write_begin_newtrunc

Move the call to vmtruncate to get rid of accessive blocks to the callers
in preparation of the new truncate sequence and rename the non-truncating
version to cont_write_begin.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent ea0f04e5
...@@ -50,10 +50,19 @@ static int adfs_write_begin(struct file *file, struct address_space *mapping, ...@@ -50,10 +50,19 @@ static int adfs_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata) struct page **pagep, void **fsdata)
{ {
int ret;
*pagep = NULL; *pagep = NULL;
return cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata, ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
adfs_get_block, adfs_get_block,
&ADFS_I(mapping->host)->mmu_private); &ADFS_I(mapping->host)->mmu_private);
if (unlikely(ret)) {
loff_t isize = mapping->host->i_size;
if (pos + len > isize)
vmtruncate(mapping->host, isize);
}
return ret;
} }
static sector_t _adfs_bmap(struct address_space *mapping, sector_t block) static sector_t _adfs_bmap(struct address_space *mapping, sector_t block)
......
...@@ -406,10 +406,19 @@ static int affs_write_begin(struct file *file, struct address_space *mapping, ...@@ -406,10 +406,19 @@ static int affs_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata) struct page **pagep, void **fsdata)
{ {
int ret;
*pagep = NULL; *pagep = NULL;
return cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata, ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
affs_get_block, affs_get_block,
&AFFS_I(mapping->host)->mmu_private); &AFFS_I(mapping->host)->mmu_private);
if (unlikely(ret)) {
loff_t isize = mapping->host->i_size;
if (pos + len > isize)
vmtruncate(mapping->host, isize);
}
return ret;
} }
static sector_t _affs_bmap(struct address_space *mapping, sector_t block) static sector_t _affs_bmap(struct address_space *mapping, sector_t block)
......
...@@ -2351,7 +2351,7 @@ static int cont_expand_zero(struct file *file, struct address_space *mapping, ...@@ -2351,7 +2351,7 @@ static int cont_expand_zero(struct file *file, struct address_space *mapping,
* For moronic filesystems that do not allow holes in file. * For moronic filesystems that do not allow holes in file.
* We may have to extend the file. * We may have to extend the file.
*/ */
int cont_write_begin_newtrunc(struct file *file, struct address_space *mapping, int cont_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata, struct page **pagep, void **fsdata,
get_block_t *get_block, loff_t *bytes) get_block_t *get_block, loff_t *bytes)
...@@ -2377,25 +2377,6 @@ int cont_write_begin_newtrunc(struct file *file, struct address_space *mapping, ...@@ -2377,25 +2377,6 @@ int cont_write_begin_newtrunc(struct file *file, struct address_space *mapping,
out: out:
return err; return err;
} }
EXPORT_SYMBOL(cont_write_begin_newtrunc);
int cont_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata,
get_block_t *get_block, loff_t *bytes)
{
int ret;
ret = cont_write_begin_newtrunc(file, mapping, pos, len, flags,
pagep, fsdata, get_block, bytes);
if (unlikely(ret)) {
loff_t isize = mapping->host->i_size;
if (pos + len > isize)
vmtruncate(mapping->host, isize);
}
return ret;
}
EXPORT_SYMBOL(cont_write_begin); EXPORT_SYMBOL(cont_write_begin);
int block_prepare_write(struct page *page, unsigned from, unsigned to, int block_prepare_write(struct page *page, unsigned from, unsigned to,
......
...@@ -159,7 +159,7 @@ static int fat_write_begin(struct file *file, struct address_space *mapping, ...@@ -159,7 +159,7 @@ static int fat_write_begin(struct file *file, struct address_space *mapping,
int err; int err;
*pagep = NULL; *pagep = NULL;
err = cont_write_begin_newtrunc(file, mapping, pos, len, flags, err = cont_write_begin(file, mapping, pos, len, flags,
pagep, fsdata, fat_get_block, pagep, fsdata, fat_get_block,
&MSDOS_I(mapping->host)->mmu_private); &MSDOS_I(mapping->host)->mmu_private);
if (err < 0) if (err < 0)
......
...@@ -39,10 +39,19 @@ static int hfs_write_begin(struct file *file, struct address_space *mapping, ...@@ -39,10 +39,19 @@ static int hfs_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata) struct page **pagep, void **fsdata)
{ {
int ret;
*pagep = NULL; *pagep = NULL;
return cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata, ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
hfs_get_block, hfs_get_block,
&HFS_I(mapping->host)->phys_size); &HFS_I(mapping->host)->phys_size);
if (unlikely(ret)) {
loff_t isize = mapping->host->i_size;
if (pos + len > isize)
vmtruncate(mapping->host, isize);
}
return ret;
} }
static sector_t hfs_bmap(struct address_space *mapping, sector_t block) static sector_t hfs_bmap(struct address_space *mapping, sector_t block)
......
...@@ -31,10 +31,19 @@ static int hfsplus_write_begin(struct file *file, struct address_space *mapping, ...@@ -31,10 +31,19 @@ static int hfsplus_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata) struct page **pagep, void **fsdata)
{ {
int ret;
*pagep = NULL; *pagep = NULL;
return cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata, ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
hfsplus_get_block, hfsplus_get_block,
&HFSPLUS_I(mapping->host).phys_size); &HFSPLUS_I(mapping->host).phys_size);
if (unlikely(ret)) {
loff_t isize = mapping->host->i_size;
if (pos + len > isize)
vmtruncate(mapping->host, isize);
}
return ret;
} }
static sector_t hfsplus_bmap(struct address_space *mapping, sector_t block) static sector_t hfsplus_bmap(struct address_space *mapping, sector_t block)
......
...@@ -97,10 +97,19 @@ static int hpfs_write_begin(struct file *file, struct address_space *mapping, ...@@ -97,10 +97,19 @@ static int hpfs_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len, unsigned flags, loff_t pos, unsigned len, unsigned flags,
struct page **pagep, void **fsdata) struct page **pagep, void **fsdata)
{ {
int ret;
*pagep = NULL; *pagep = NULL;
return cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata, ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
hpfs_get_block, hpfs_get_block,
&hpfs_i(mapping->host)->mmu_private); &hpfs_i(mapping->host)->mmu_private);
if (unlikely(ret)) {
loff_t isize = mapping->host->i_size;
if (pos + len > isize)
vmtruncate(mapping->host, isize);
}
return ret;
} }
static sector_t _hpfs_bmap(struct address_space *mapping, sector_t block) static sector_t _hpfs_bmap(struct address_space *mapping, sector_t block)
......
...@@ -320,10 +320,19 @@ static int qnx4_write_begin(struct file *file, struct address_space *mapping, ...@@ -320,10 +320,19 @@ static int qnx4_write_begin(struct file *file, struct address_space *mapping,
struct page **pagep, void **fsdata) struct page **pagep, void **fsdata)
{ {
struct qnx4_inode_info *qnx4_inode = qnx4_i(mapping->host); struct qnx4_inode_info *qnx4_inode = qnx4_i(mapping->host);
int ret;
*pagep = NULL; *pagep = NULL;
return cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata, ret = cont_write_begin(file, mapping, pos, len, flags, pagep, fsdata,
qnx4_get_block, qnx4_get_block,
&qnx4_inode->mmu_private); &qnx4_inode->mmu_private);
if (unlikely(ret)) {
loff_t isize = mapping->host->i_size;
if (pos + len > isize)
vmtruncate(mapping->host, isize);
}
return ret;
} }
static sector_t qnx4_bmap(struct address_space *mapping, sector_t block) static sector_t qnx4_bmap(struct address_space *mapping, sector_t block)
{ {
......
...@@ -217,9 +217,6 @@ int generic_write_end(struct file *, struct address_space *, ...@@ -217,9 +217,6 @@ int generic_write_end(struct file *, struct address_space *,
struct page *, void *); struct page *, void *);
void page_zero_new_buffers(struct page *page, unsigned from, unsigned to); void page_zero_new_buffers(struct page *page, unsigned from, unsigned to);
int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*); int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*);
int cont_write_begin_newtrunc(struct file *, struct address_space *, loff_t,
unsigned, unsigned, struct page **, void **,
get_block_t *, loff_t *);
int cont_write_begin(struct file *, struct address_space *, loff_t, int cont_write_begin(struct file *, struct address_space *, loff_t,
unsigned, unsigned, struct page **, void **, unsigned, unsigned, struct page **, void **,
get_block_t *, loff_t *); get_block_t *, loff_t *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment