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: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>hifive-unleashed-5.1
parent
ea0f04e595
commit
282dc17884
|
@ -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,
|
||||||
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)
|
||||||
|
|
21
fs/buffer.c
21
fs/buffer.c
|
@ -2351,7 +2351,7 @@ out:
|
||||||
* 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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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 *,
|
||||||
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 *);
|
||||||
|
|
Loading…
Reference in New Issue