Merge branch 'work.set_fs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull more set_fs removal from Al Viro: "Christoph's 'use kernel_read and friends rather than open-coding set_fs()' series" * 'work.set_fs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: fs: unexport vfs_readv and vfs_writev fs: unexport vfs_read and vfs_write fs: unexport __vfs_read/__vfs_write lustre: switch to kernel_write gadget/f_mass_storage: stop messing with the address limit mconsole: switch to kernel_read btrfs: switch write_buf to kernel_write net/9p: switch p9_fd_read to kernel_write mm/nommu: switch do_mmap_private to kernel_read serial2002: switch serial2002_tty_write to kernel_{read/write} fs: make the buf argument to __kernel_write a void pointer fs: fix kernel_write prototype fs: fix kernel_read prototype fs: move kernel_read to fs/read_write.c fs: move kernel_write to fs/read_write.c autofs4: switch autofs4_write to __kernel_write ashmem: switch to ->read_iter
This commit is contained in:
@@ -272,6 +272,7 @@ static int p9_fd_read(struct p9_client *client, void *v, int len)
|
||||
{
|
||||
int ret;
|
||||
struct p9_trans_fd *ts = NULL;
|
||||
loff_t pos;
|
||||
|
||||
if (client && client->status != Disconnected)
|
||||
ts = client->trans;
|
||||
@@ -282,7 +283,8 @@ static int p9_fd_read(struct p9_client *client, void *v, int len)
|
||||
if (!(ts->rd->f_flags & O_NONBLOCK))
|
||||
p9_debug(P9_DEBUG_ERROR, "blocking read ...\n");
|
||||
|
||||
ret = kernel_read(ts->rd, ts->rd->f_pos, v, len);
|
||||
pos = ts->rd->f_pos;
|
||||
ret = kernel_read(ts->rd, v, len, &pos);
|
||||
if (ret <= 0 && ret != -ERESTARTSYS && ret != -EAGAIN)
|
||||
client->status = Disconnected;
|
||||
return ret;
|
||||
@@ -420,8 +422,7 @@ error:
|
||||
|
||||
static int p9_fd_write(struct p9_client *client, void *v, int len)
|
||||
{
|
||||
int ret;
|
||||
mm_segment_t oldfs;
|
||||
ssize_t ret;
|
||||
struct p9_trans_fd *ts = NULL;
|
||||
|
||||
if (client && client->status != Disconnected)
|
||||
@@ -433,12 +434,7 @@ static int p9_fd_write(struct p9_client *client, void *v, int len)
|
||||
if (!(ts->wr->f_flags & O_NONBLOCK))
|
||||
p9_debug(P9_DEBUG_ERROR, "blocking write ...\n");
|
||||
|
||||
oldfs = get_fs();
|
||||
set_fs(get_ds());
|
||||
/* The cast to a user pointer is valid due to the set_fs() */
|
||||
ret = vfs_write(ts->wr, (__force void __user *)v, len, &ts->wr->f_pos);
|
||||
set_fs(oldfs);
|
||||
|
||||
ret = kernel_write(ts->wr, v, len, &ts->wr->f_pos);
|
||||
if (ret <= 0 && ret != -ERESTARTSYS && ret != -EAGAIN)
|
||||
client->status = Disconnected;
|
||||
return ret;
|
||||
|
Reference in New Issue
Block a user