splice: remove generic_file_splice_write_nolock()
Remove the now unused generic_file_splice_write_nolock() function. It's conceptually broken anyway, because splice may need to wait for pipe events so holding locks across the whole operation is wrong. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
328eaaba4e
commit
f8cc774ce4
59
fs/splice.c
59
fs/splice.c
|
@ -810,65 +810,6 @@ ssize_t splice_from_pipe(struct pipe_inode_info *pipe, struct file *out,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* generic_file_splice_write_nolock - generic_file_splice_write without mutexes
|
|
||||||
* @pipe: pipe info
|
|
||||||
* @out: file to write to
|
|
||||||
* @ppos: position in @out
|
|
||||||
* @len: number of bytes to splice
|
|
||||||
* @flags: splice modifier flags
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* Will either move or copy pages (determined by @flags options) from
|
|
||||||
* the given pipe inode to the given file. The caller is responsible
|
|
||||||
* for acquiring i_mutex on both inodes.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
ssize_t
|
|
||||||
generic_file_splice_write_nolock(struct pipe_inode_info *pipe, struct file *out,
|
|
||||||
loff_t *ppos, size_t len, unsigned int flags)
|
|
||||||
{
|
|
||||||
struct address_space *mapping = out->f_mapping;
|
|
||||||
struct inode *inode = mapping->host;
|
|
||||||
struct splice_desc sd = {
|
|
||||||
.total_len = len,
|
|
||||||
.flags = flags,
|
|
||||||
.pos = *ppos,
|
|
||||||
.u.file = out,
|
|
||||||
};
|
|
||||||
ssize_t ret;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
err = file_remove_suid(out);
|
|
||||||
if (unlikely(err))
|
|
||||||
return err;
|
|
||||||
|
|
||||||
ret = __splice_from_pipe(pipe, &sd, pipe_to_file);
|
|
||||||
if (ret > 0) {
|
|
||||||
unsigned long nr_pages;
|
|
||||||
|
|
||||||
*ppos += ret;
|
|
||||||
nr_pages = (ret + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If file or inode is SYNC and we actually wrote some data,
|
|
||||||
* sync it.
|
|
||||||
*/
|
|
||||||
if (unlikely((out->f_flags & O_SYNC) || IS_SYNC(inode))) {
|
|
||||||
err = generic_osync_inode(inode, mapping,
|
|
||||||
OSYNC_METADATA|OSYNC_DATA);
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
ret = err;
|
|
||||||
}
|
|
||||||
balance_dirty_pages_ratelimited_nr(mapping, nr_pages);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(generic_file_splice_write_nolock);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* generic_file_splice_write - splice data from a pipe to a file
|
* generic_file_splice_write - splice data from a pipe to a file
|
||||||
* @pipe: pipe info
|
* @pipe: pipe info
|
||||||
|
|
|
@ -2209,8 +2209,6 @@ extern ssize_t generic_file_splice_read(struct file *, loff_t *,
|
||||||
struct pipe_inode_info *, size_t, unsigned int);
|
struct pipe_inode_info *, size_t, unsigned int);
|
||||||
extern ssize_t generic_file_splice_write(struct pipe_inode_info *,
|
extern ssize_t generic_file_splice_write(struct pipe_inode_info *,
|
||||||
struct file *, loff_t *, size_t, unsigned int);
|
struct file *, loff_t *, size_t, unsigned int);
|
||||||
extern ssize_t generic_file_splice_write_nolock(struct pipe_inode_info *,
|
|
||||||
struct file *, loff_t *, size_t, unsigned int);
|
|
||||||
extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
|
extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
|
||||||
struct file *out, loff_t *, size_t len, unsigned int flags);
|
struct file *out, loff_t *, size_t len, unsigned int flags);
|
||||||
extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
|
extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
|
||||||
|
|
Reference in New Issue