Commit Graph
100 Commits
Author SHA1 Message Date
Al Viro 653a7746fa Merge remote-tracking branch 'ovl/for-viro' into for-linus
Overlayfs-related series from Miklos and Amir
2017-03-02 06:41:22 -05:00
Al Viro f6c99aad4d Merge branch 'work.namei' into for-linus 2017-03-02 06:41:12 -05:00
Al Viro 137d01df51 Fix missing sanity check in /dev/sg
What happens is that a write to /dev/sg is given a request with non-zero
->iovec_count combined with zero ->dxfer_len.  Or with ->dxferp pointing
to an array full of empty iovecs.

Having write permission to /dev/sg shouldn't be equivalent to the
ability to trigger BUG_ON() while holding spinlocks...

Found by Dmitry Vyukov and syzkaller.

[ The BUG_ON() got changed to a WARN_ON_ONCE(), but this fixes the
  underlying issue.  - Linus ]

Signed-off-by: Al Viro <[email protected]>
Reported-by: Dmitry Vyukov <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Cc: [email protected]
Signed-off-by: Linus Torvalds <[email protected]>
2017-02-19 09:54:31 -08:00
Al Viro b8826e506e selftest for default_file_splice_read() infoleak
bug fixed in commit b9dc6f65bc ("fix a fencepost error in pipe_advance()")

Signed-off-by: Al Viro <[email protected]>
2017-02-18 22:07:24 -05:00
Al Viro 7d7be3aa08 powerpc/spufs: Get rid of broken fasync stuff
In all the years it's been in the tree it had never been used by
anything - it would instantly trigger BUG_ON() in fs/fcntl.c due to
bogus band argument (ie. POLLIN not POLL_IN) passed to kill_fasync().
Since nobody had ever used it in ten years, let's just rip it out and be
done with that.

Signed-off-by: Al Viro <[email protected]>
Acked-by: Arnd Bergmann <[email protected]>
Signed-off-by: Michael Ellerman <[email protected]>
2017-02-15 20:32:59 +11:00
Al Viro b9dc6f65bc fix a fencepost error in pipe_advance()
The logics in pipe_advance() used to release all buffers past the new
position failed in cases when the number of buffers to release was equal
to pipe->buffers.  If that happened, none of them had been released,
leaving pipe full.  Worse, it was trivial to trigger and we end up with
pipe full of uninitialized pages.  IOW, it's an infoleak.

Cc: [email protected] # v4.9
Reported-by: "Alan J. Wylie" <[email protected]>
Tested-by: "Alan J. Wylie" <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2017-01-14 19:50:41 -05:00
Al Viro 7880b43bdf 9p: constify ->d_name handling
Signed-off-by: Al Viro <[email protected]>
2017-01-12 04:01:17 -05:00
Al Viro 4675ac39b5 namei.c: split unlazy_walk()
In all but one case, the last two arguments are NULL and 0 resp.;
almost everyone just wants to switch nameidata to non-RCU mode.
The only exception is lookup_fast(), where we have a child dentry
we want to legitimize as well.  Split these two cases.

Signed-off-by: Al Viro <[email protected]>
2017-01-09 22:29:15 -05:00
Al Viro a89f833737 namei.c: fold the check for DCACHE_OP_REVALIDATE into d_revalidate()
Signed-off-by: Al Viro <[email protected]>
2017-01-09 22:25:28 -05:00
Al Viro 209a7fb210 lookup_fast(): clean up the logics around the fallback to non-rcu mode
Signed-off-by: Al Viro <[email protected]>
2017-01-09 01:35:39 -05:00
Al Viro ad1633a151 namei: fold unlazy_link() into its sole caller
Signed-off-by: Al Viro <[email protected]>
2017-01-08 22:35:31 -05:00
Al Viro 4038a2a37e Merge branches 'sendmsg.misc' and 'sendmsg.ncpfs' into work.sendmsg 2016-12-26 21:38:34 -05:00
Al Viro b8e2df1f81 ncpfs: switch to sock_sendmsg()
Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:37:39 -05:00
Al Viro 2cebcc78fa ncpfs: don't mess with manually advancing iovec on send
just keep iov_iter in req

Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:37:38 -05:00
Al Viro 4b4fbad37f ncpfs: sendmsg does *not* bugger iovec these days
Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:37:37 -05:00
Al Viro 61ff6e9b45 ceph_tcp_sendpage(): use ITER_BVEC sendmsg
Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:35:41 -05:00
Al Viro 39c6aceae9 afs_send_pages(): use ITER_BVEC
Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:35:40 -05:00
Al Viro be6e4d66f0 rds: remove dead code
Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:35:39 -05:00
Al Viro 100803a84d ceph: switch to sock_recvmsg()
... and use ITER_BVEC instead of playing with kmap()

Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:35:38 -05:00
Al Viro 3995d16107 usbip_recv(): switch to sock_recvmsg()
Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:35:37 -05:00
Al Viro 4113e47b3d iscsi_target: deal with short writes on the tx side
Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:35:36 -05:00
Al Viro c9f2b6aeb9 [nbd] pass iov_iter to nbd_xmit()
... and don't mess with kmap() - just use BVEC_ITER for those parts.

Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:35:13 -05:00
Al Viro c1696cab70 [nbd] switch sock_xmit() to sock_{send,recv}msg()
Step 1 - don't reinintialize ->msg_iter on each iteration.

Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:21:23 -05:00
Al Viro 79ab80beb7 [drbd] use sock_sendmsg()
... and keep ->msg_iter through the loop

Signed-off-by: Al Viro <[email protected]>
2016-12-26 21:21:10 -05:00
Al Viro b4b8664d29 arm64: don't pull uaccess.h into *.S
Split asm-only parts of arm64 uaccess.h into a new header and use that
from *.S.

Signed-off-by: Al Viro <[email protected]>
2016-12-26 13:05:17 -05:00
Al Viro faf0dcebd7 Merge branch 'work.namespace' into for-linus 2016-12-22 23:04:31 -05:00
Al Viro 128394eff3 sg_write()/bsg_write() is not fit to be called under KERNEL_DS
Both damn things interpret userland pointers embedded into the payload;
worse, they are actually traversing those.  Leaving aside the bad
API design, this is very much _not_ safe to call with KERNEL_DS.
Bail out early if that happens.

Cc: [email protected]
Signed-off-by: Al Viro <[email protected]>
2016-12-22 23:03:42 -05:00
Al Viro 33844e6651 [iov_iter] fix iterate_all_kinds() on empty iterators
Problem similar to ones dealt with in "fold checks into iterate_and_advance()"
and followups, except that in this case we really want to do nothing when
asked for zero-length operation - unlike zero-length iterate_and_advance(),
zero-length iterate_all_kinds() has no side effects, and callers are simpler
that way.

That got exposed when copy_from_iter_full() had been used by tipc, which
builds an msghdr with zero payload and (now) feeds it to a primitive
based on iterate_all_kinds() instead of iterate_and_advance().

Reported-by: Jon Maloy <[email protected]>
Tested-by: Jon Maloy <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2016-12-22 23:00:22 -05:00
Al Viro c00d2c7e89 move aio compat to fs/aio.c
... and fix the minor buglet in compat io_submit() - native one
kills ioctx as cleanup when put_user() fails.  Get rid of
bogus compat_... in !CONFIG_AIO case, while we are at it - they
should simply fail with ENOSYS, same as for native counterparts.

Signed-off-by: Al Viro <[email protected]>
2016-12-22 22:58:37 -05:00
Al Viro 9763f7a4a5 Merge branch 'work.autofs' into for-linus
Signed-off-by: Al Viro <[email protected]>
2016-12-16 16:34:52 -05:00
Al Viro 5235d448c4 reorganize do_make_slave()
Make sure that clone_mnt() never returns a mount with MNT_SHARED in
flags, but without a valid ->mnt_group_id.  That allows to demystify
do_make_slave() quite a bit, among other things.

Signed-off-by: Al Viro <[email protected]>
2016-12-16 16:30:49 -05:00
Al Viro 066715d3fd clone_private_mount() doesn't need to touch namespace_sem
not for CL_PRIVATE clone_mnt()

Signed-off-by: Al Viro <[email protected]>
2016-12-16 16:30:49 -05:00
Al Viro f4cc1c3810 remove a bogus claim about namespace_sem being held by callers of mnt_alloc_id()
Hadn't been true for quite a while

Signed-off-by: Al Viro <[email protected]>
2016-12-16 16:30:48 -05:00
Al Viro 3c55d6bcfe Merge remote-tracking branch 'djwong/ocfs2-vfs-reflink-6' into for-linus 2016-12-16 16:21:05 -05:00
Al Viro 4da00fd1b9 Merge branch 'work.write_end' into for-linus 2016-12-16 16:19:49 -05:00
Al Viro 32a3d848eb ovl: clean up kstat usage
FWIW, there's a bit of abuse of struct kstat in overlayfs object
creation paths - for one thing, it ends up with a very small subset
of struct kstat (mode + rdev), for another it also needs link in
case of symlinks and ends up passing it separately.

IMO it would be better to introduce a separate object for that.

In principle, we might even lift that thing into general API and switch
 ->mkdir()/->mknod()/->symlink() to identical calling conventions.  Hell
knows, perhaps ->create() as well...

Signed-off-by: Miklos Szeredi <[email protected]>
2016-12-16 11:02:57 +01:00
Al Viro c4364f837c Merge branches 'work.namei', 'work.dcache' and 'work.iov_iter' into for-linus 2016-12-15 01:07:29 -05:00
Al Viro 04fff6416c simple_write_end(): don't zero in short copy into uptodate
Signed-off-by: Al Viro <[email protected]>
2016-12-10 14:25:19 -05:00
Al Viro 92e50d2d42 exofs: don't mess with simple_write_{begin,end}
... and don't zero anything on short copy; just unlock
and return 0 if that has happened on non-uptodate page.

Signed-off-by: Al Viro <[email protected]>
2016-12-10 14:25:19 -05:00
Al Viro 77469c3f57 9p: saner ->write_end() on failing copy into non-uptodate page
If we had a short copy into an uptodate page, there's no reason
whatsoever to zero anything; OTOH, if that page had _not_ been
uptodate, we must have been trying to overwrite it completely
and got a short copy.  In that case, overwriting the end with
zeroes, marking uptodate and sending to server is just plain
wrong.  Just unlock, keep it non-uptodate and return 0.

Signed-off-by: Al Viro <[email protected]>
2016-12-10 14:25:18 -05:00
Al Viro 43388b21e7 fix gfs2_stuffed_write_end() on short copies
a) the page is uptodate - ->write_begin() would either fail (in which
case we don't reach ->write_end()), or unstuff the inode, or find the
page already uptodate, or do a successful call of stuffed_readpage(),
which would've made it uptodate

b) zeroing the tail in pagecache is wrong.  kill -9 at the right time
while writing unmodified file contents to the same file should _not_
leave us in a situation when read() from the file will be reporting
it full of zeroes.  Especially since that effect will be transient -
at some later point the page will be evicted and then we'll be back
to the real file contents.

Signed-off-by: Al Viro <[email protected]>
2016-12-10 14:25:18 -05:00
Al Viro b9de313cf0 fix ceph_write_end()
don't zero on short copies; if the page was uptodate it's just plain
wrong, and if it wasn't we'll be better off just returning 0 and
buggering off.

Signed-off-by: Al Viro <[email protected]>
2016-12-10 14:24:45 -05:00
Al Viro c0cf3ef5e0 nfs_write_end(): fix handling of short copies
What matters when deciding if we should make a page uptodate is
not how much we _wanted_ to copy, but how much we actually have
copied.  As it is, on architectures that do not zero tail on
short copy we can leave uninitialized data in page marked uptodate.

Cc: [email protected]
Signed-off-by: Al Viro <[email protected]>
2016-12-09 22:41:47 -05:00
Al Viro 8f64fb1cce namei: fold should_follow_link() with the step into not-followed link
All callers are followed by the same boilerplate - "if it has returned
0, update nd->path/inode/seq - we are not following a symlink here".
Pull it into the function itself, renaming it into step_into().
Rename WALK_GET to WALK_FOLLOW, while we are at it - more descriptive
name.

Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:11:58 -05:00
Al Viro 31d66bcd3f namei: pass both WALK_GET and WALK_MORE to should_follow_link()
... and pull put_link() logics into it.

Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:11:58 -05:00
Al Viro 1c4ff1a87e namei: invert WALK_PUT logics
... turning the condition for put_link() in walk_component() into
"WALK_MORE not passed and depth is non-zero".  Again, makes for
simpler arguments.

Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:11:57 -05:00
Al Viro 7f49b47109 namei: shift interpretation of LOOKUP_FOLLOW inside should_follow_link()
Simplifies the arguments both for it and for walk_component()

Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:11:57 -05:00
Al Viro ba8f46135a namei: saner calling conventions for mountpoint_last()
leave the result in nd->path, have caller do follow_mount() and
copy it to the final destination.

Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:11:57 -05:00
Al Viro c1d4dd2767 namei.c: get rid of user_path_parent()
direct use of filename_parentat() is just as readable

Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:11:57 -05:00
Al Viro f0bb5aaf2c vfs: misc struct path constification
Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:03:49 -05:00
Al Viro ca71cf71ee namespace.c: constify struct path passed to a bunch of primitives
Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:03:12 -05:00
Al Viro 8c54ca9c68 quota: constify struct path in quota_on
Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:03:06 -05:00
Al Viro a4141d7cf8 constify alloc_file()
Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:01:16 -05:00
Al Viro 92872094a1 constify btrfs_mksubvol()
Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:01:16 -05:00
Al Viro 5b5577e4eb autofs: constify find_autofs_mount() callback
Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:01:16 -05:00
Al Viro 71215a75ce constify get_dcookie() and friends
Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:01:16 -05:00
Al Viro 8bd107633b audit_log_{name,link_denied}: constify struct path
Signed-off-by: Al Viro <[email protected]>
2016-12-05 19:00:38 -05:00
Al Viro 40212d531d fsnotify: constify the places working with ->f_path
Signed-off-by: Al Viro <[email protected]>
2016-12-05 18:58:32 -05:00
Al Viro 12c7f9dc0f constify fsnotify_parent()
Signed-off-by: Al Viro <[email protected]>
2016-12-05 18:58:32 -05:00
Al Viro e637835ecc fsnotify(): constify 'data'
Signed-off-by: Al Viro <[email protected]>
2016-12-05 18:58:31 -05:00
Al Viro 3cd5eca8d7 fsnotify: constify 'data' passed to ->handle_event()
Signed-off-by: Al Viro <[email protected]>
2016-12-05 18:58:31 -05:00
Al Viro 0b62fca262 switch getfrag callbacks to ..._full() primitives
Signed-off-by: Al Viro <[email protected]>
2016-12-05 14:34:32 -05:00
Al Viro 15e6cb46c9 make skb_add_data,{_nocache}() and skb_copy_to_page_nocache() advance only on success
Signed-off-by: Al Viro <[email protected]>
2016-12-05 14:34:30 -05:00
Al Viro cbbd26b8b1 [iov_iter] new primitives - copy_from_iter_full() and friends
copy_from_iter_full(), copy_from_iter_full_nocache() and
csum_and_copy_from_iter_full() - counterparts of copy_from_iter()
et.al., advancing iterator only in case of successful full copy
and returning whether it had been successful or not.

Convert some obvious users.  *NOTE* - do not blindly assume that
something is a good candidate for those unless you are sure that
not advancing iov_iter in failure case is the right thing in
this case.  Anything that does short read/short write kind of
stuff (or is in a loop, etc.) is unlikely to be a good one.

Signed-off-by: Al Viro <[email protected]>
2016-12-05 14:33:36 -05:00
Al Viro 450630975d don't open-code file_inode()
Signed-off-by: Al Viro <[email protected]>
2016-12-04 18:29:28 -05:00
Al Viro 8e54cadab4 fix default_file_splice_read()
Botched calculation of number of pages.  As the result,
we were dropping pieces when doing splice to pipe from
e.g. 9p.

Reported-by: Alexei Starovoitov <[email protected]>
Tested-by: Alexei Starovoitov <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2016-11-26 20:05:42 -05:00
Al Viro e519e77747 splice: remove detritus from generic_file_splice_read()
i_size check is a leftover from the horrors that used to play with
the page cache in that function.  With the switch to ->read_iter(),
it's neither needed nor correct - for gfs2 it ends up being buggy,
since i_size is not guaranteed to be correct until later (inside
->read_iter()).

Spotted-by: Abhi Das <[email protected]>
Signed-off-by: Al Viro <[email protected]>
2016-11-10 18:32:13 -05:00
Al Viro ad5cb123fd ceph: switch to use of ->d_init()
Signed-off-by: Al Viro <[email protected]>
2016-10-28 22:05:13 -04:00
Al Viro 18fc8abdb7 ceph: unify dentry_operations instances
Signed-off-by: Al Viro <[email protected]>
2016-10-28 21:52:50 -04:00
Al Viro 7126bc2e8d lustre: switch to use of ->d_init()
Signed-off-by: Al Viro <[email protected]>
2016-10-15 19:09:13 -04:00
Al Viro 2692a71bbd Merge branch 'work.uaccess' into for-linus 2016-10-14 20:42:44 -04:00
Al Viro 1689c73a73 Fix off-by-one in __pipe_get_pages()
it actually worked only when requested area ended on the page boundary...

Reported-by: Marco Grassi <[email protected]>
Signed-off-by: Al Viro <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
2016-10-11 10:40:01 -07:00
Al Viro 3873691e5a Merge remote-tracking branch 'ovl/rename2' into for-linus 2016-10-10 23:02:51 -04:00
Al Viro cd27e45504 [btrfs] fix check_direct_IO() for non-iovec iterators
looking for duplicate ->iov_base makes sense only for
iovec-backed iterators; for kvec-backed ones it's pointless,
for bvec-backed ones it's pointless and broken on 32bit (we
walk through an array of struct bio_vec accessing them as if
they were struct iovec; works by accident on 64bit, but on
32bit it'll blow up) and for pipe-backed ones it's pointless
and ends up oopsing.

Signed-off-by: Al Viro <[email protected]>
2016-10-10 13:58:16 -04:00
Al Viro b57332b410 constify iov_iter_count() and iter_is_iovec()
Signed-off-by: Al Viro <[email protected]>
2016-10-10 13:57:37 -04:00
Al Viro c3a6902404 fix ITER_PIPE interaction with direct_IO
by making sure we call iov_iter_advance() on original
iov_iter even if direct_IO (done on its copy) has returned 0.
It's a no-op for old iov_iter flavours and does the right thing
(== truncation of the stuff we'd allocated, but not filled) in
ITER_PIPE case.  Failures (e.g. -EIO) get caught and dealt with
by cleanup in generic_file_read_iter().

Signed-off-by: Al Viro <[email protected]>
2016-10-10 13:36:06 -04:00
Al Viro e55f1d1d13 Merge remote-tracking branch 'jk/vfs' into work.misc 2016-10-08 11:06:08 -04:00
Al Viro f334bcd94b Merge remote-tracking branch 'ovl/misc' into work.misc 2016-10-08 11:00:01 -04:00
Al Viro 73e8fb2d59 Merge branch 'work.const-qstr' into work.misc 2016-10-08 10:44:55 -04:00
Al Viro 33e09f0ee7 Merge branch 'work.iget' into work.misc 2016-10-08 10:44:37 -04:00
Al Viro 41fefa36be Merge remote-tracking branch 'fuse/xattr' into work.xattr 2016-10-07 20:10:55 -04:00
Al Viro bf02f5d2c0 Merge commit '2c563880ea' into work.xattr
pick xattr_handler conversion from lustre tree
2016-10-07 20:09:18 -04:00
Al Viro c531716785 proc: switch auxv to use of __mem_open()
Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:43:43 -04:00
Al Viro aa7eb9ad32 remove a stray reference to asm/uaccess.h in docs
Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:38:40 -04:00
Al Viro c99d2abd9b sparc64: separate extable_64.h, switch elf_64.h to it
Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:38:40 -04:00
Al Viro 88dd4a748d score: separate extable.h, switch module.h to it
Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:38:39 -04:00
Al Viro 29abfbd9cb mips: separate extable.h, switch module.h to it
more victims of indirect include chains - au1200fb
lasat/picvue_proc and watchdog/ath79_wdt

... as well as tb0219, spotted by Sudip Mukherjee

Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:36:18 -04:00
Al Viro a7c2242166 relay: simplify relay_file_read()
to hell with actors...

Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:23:57 -04:00
Al Viro 523ac9afc7 switch default_file_splice_read() to use of pipe-backed iov_iter
we only use iov_iter_get_pages_alloc() and iov_iter_advance() -
pages are filled by kernel_readv() via a kvec array (as we used
to do all along), so iov_iter here is used only as a way of
arranging for those pages to be in pipe.

Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:23:56 -04:00
Al Viro 82c156f853 switch generic_file_splice_read() to use of ->read_iter()
... and kill the ->splice_read() instances that can be switched to it

Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:23:56 -04:00
Al Viro 241699cd72 new iov_iter flavour: pipe-backed
iov_iter variant for passing data into pipe.  copy_to_iter()
copies data into page(s) it has allocated and stuffs them into
the pipe; copy_page_to_iter() stuffs there a reference to the
page given to it.  Both will try to coalesce if possible.
iov_iter_zero() is similar to copy_to_iter(); iov_iter_get_pages()
and friends will do as copy_to_iter() would have and return the
pages where the data would've been copied.  iov_iter_advance()
will truncate everything past the spot it has advanced to.

New primitive: iov_iter_pipe(), used for initializing those.
pipe should be locked all along.

Running out of space acts as fault would for iovec-backed ones;
in other words, giving it to ->read_iter() may result in short
read if the pipe overflows, or -EFAULT if it happens with nothing
copied there.

In other words, ->read_iter() on those acts pretty much like
->splice_read().  Moreover, all generic_file_splice_read() users,
as well as many other ->splice_read() instances can be switched
to that scheme - that'll happen in the next commit.

Signed-off-by: Al Viro <[email protected]>
2016-10-05 18:23:36 -04:00
Al Viro d82718e348 fuse_dev_splice_read(): switch to add_to_pipe()
Signed-off-by: Al Viro <[email protected]>
2016-10-03 20:40:56 -04:00
Al Viro 25869262ef skb_splice_bits(): get rid of callback
since pipe_lock is the outermost now, we don't need to drop/regain
socket locks around the call of splice_to_pipe() from skb_splice_bits(),
which kills the need to have a socket-specific callback; we can just
call splice_to_pipe() and be done with that.

Signed-off-by: Al Viro <[email protected]>
2016-10-03 20:40:56 -04:00
Al Viro 79fddc4efd new helper: add_to_pipe()
single-buffer analogue of splice_to_pipe(); vmsplice_to_pipe() switched
to that, leaving splice_to_pipe() only for ->splice_read() instances
(and that only until they are converted as well).

Signed-off-by: Al Viro <[email protected]>
2016-10-03 20:40:55 -04:00
Al Viro 8924feff66 splice: lift pipe_lock out of splice_to_pipe()
* splice_to_pipe() stops at pipe overflow and does *not* take pipe_lock
* ->splice_read() instances do the same
* vmsplice_to_pipe() and do_splice() (ultimate callers of splice_to_pipe())
  arrange for waiting, looping, etc. themselves.

That should make pipe_lock the outermost one.

Unfortunately, existing rules for the amount passed by vmsplice_to_pipe()
and do_splice() are quite ugly _and_ userland code can be easily broken
by changing those.  It's not even "no more than the maximal capacity of
this pipe" - it's "once we'd fed pipe->nr_buffers pages into the pipe,
leave instead of waiting".

Considering how poorly these rules are documented, let's try "wait for some
space to appear, unless given SPLICE_F_NONBLOCK, then push into pipe
and if we run into overflow, we are done".

Signed-off-by: Al Viro <[email protected]>
2016-10-03 20:40:55 -04:00
Al Viro db85a9eb2e splice: switch get_iovec_page_array() to iov_iter
Signed-off-by: Al Viro <[email protected]>
2016-10-03 20:40:54 -04:00
Al Viro e7c3c64624 splice_to_pipe(): don't open-code wakeup_pipe_readers()
Signed-off-by: Al Viro <[email protected]>
2016-10-03 20:40:54 -04:00
Al Viro 4038acdb18 consistent treatment of EFAULT on O_DIRECT read/write
Make local filesystems treat a fault as shortened IO,
returning -EFAULT only if nothing had been transferred.
That's how everything else (NFS, FUSE, ceph, Lustre)
behaves.

Signed-off-by: Al Viro <[email protected]>
2016-10-03 20:38:55 -04:00
Al Viro 3daa9c5165 fuse_ioctl_copy_user(): don't open-code copy_page_{to,from}_iter()
Signed-off-by: Al Viro <[email protected]>
Signed-off-by: Miklos Szeredi <[email protected]>
2016-10-01 07:32:33 +02:00
Al Viro dbbab32574 cifs: get rid of unused arguments of CIFSSMBWrite()
they used to be used, but...

Signed-off-by: Al Viro <[email protected]>
2016-09-27 21:54:53 -04:00