linux/fs/nfs
tarangg@amazon.com e973b1a599 NFS: Sync the correct byte range during synchronous writes
Since commit 18290650b1 ("NFS: Move buffered I/O locking into
nfs_file_write()") nfs_file_write() has not flushed the correct byte
range during synchronous writes.  generic_write_sync() expects that
iocb->ki_pos points to the right edge of the range rather than the
left edge.

To replicate the problem, open a file with O_DSYNC, have the client
write at increasing offsets, and then print the successful offsets.
Block port 2049 partway through that sequence, and observe that the
client application indicates successful writes in advance of what the
server received.

Fixes: 18290650b1 ("NFS: Move buffered I/O locking into nfs_file_write()")
Signed-off-by: Jacob Strauss <jsstraus@amazon.com>
Signed-off-by: Tarang Gupta <tarangg@amazon.com>
Tested-by: Tarang Gupta <tarangg@amazon.com>
Cc: stable@vger.kernel.org # v4.8+
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2017-09-07 11:07:13 -04:00
..
blocklayout block: switch bios to blk_status_t 2017-06-09 09:27:32 -06:00
filelayout NFS/filelayout: Fix racy setting of fl->dsaddr in filelayout_check_deviceid() 2017-07-21 14:08:45 -04:00
flexfilelayout nfs/flexfiles: fix leak of nfs4_ff_ds_version arrays 2017-08-08 17:18:10 -04:00
cache_lib.c sunrpc/nfs: cleanup procfs/pipefs entry in cache_detail 2017-02-08 17:02:45 -05:00
cache_lib.h
callback_proc.c NFS: Use an atomic_long_t to count the number of requests 2017-08-15 11:54:47 -04:00
callback_xdr.c Chuck's RDMA update overhauls the "call receive" side of the 2017-07-13 13:56:24 -07:00
callback.c sunrpc: mark all struct svc_version instances as const 2017-07-13 15:58:03 -04:00
callback.h nfs: don't cast callback decode/proc/encode routines 2017-07-13 15:57:56 -04:00
client.c mount: copy the port field into the cloned nfs_server structure. 2017-07-19 15:28:21 -04:00
delegation.c NFS: Use an atomic_long_t to count the number of requests 2017-08-15 11:54:47 -04:00
delegation.h NFSv4: nfs_inode_find_state_and_recover() should check all stateids 2016-09-27 14:34:35 -04:00
dir.c NFS: remove jiffies field from access cache 2017-09-06 12:32:37 -04:00
direct.c NFSv4: Use a mutex to protect the per-inode commit lists 2017-08-15 11:54:47 -04:00
dns_resolve.c
dns_resolve.h
export.c nfs: add export operations 2017-07-13 17:12:04 -04:00
file.c NFS: Sync the correct byte range during synchronous writes 2017-09-07 11:07:13 -04:00
fscache-index.c NFS: Fabricate fscache server index key correctly 2014-09-25 21:25:18 -04:00
fscache.c nfs: define nfs_inc_fscache_stats and using it as possible 2014-11-24 20:08:47 -05:00
fscache.h
getroot.c Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
inode.c NFS: Use an atomic_long_t to count the number of commits 2017-08-15 11:54:48 -04:00
internal.h NFS client updates for Linux 4.13 2017-07-13 14:35:37 -07:00
io.c NFS: Do not serialise O_DIRECT reads and writes 2016-07-05 19:11:04 -04:00
iostat.h nfs: define nfs_inc_fscache_stats and using it as possible 2014-11-24 20:08:47 -05:00
Kconfig pnfs/blocklayout: require 64-bit sector_t 2017-08-11 14:10:13 -04:00
Makefile nfs: add export operations 2017-07-13 17:12:04 -04:00
mount_clnt.c nfs: count correct array for mnt3_counts array size 2017-07-21 08:49:57 -04:00
namespace.c NFS: Use ERR_CAST() to avoid cross-structure cast 2017-05-28 10:11:47 -07:00
netns.h netns: make struct pernet_operations::id unsigned int 2016-11-18 10:59:15 -05:00
nfs2super.c
nfs2xdr.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
nfs3_fs.h nfsv3: introduce nfs3_set_ds_client 2015-02-03 11:06:34 -08:00
nfs3acl.c posix_acl: Inode acl caching fixes 2016-03-31 00:30:15 -04:00
nfs3client.c NFS: Remove unused authflavour parameter from nfs_get_client() 2016-12-01 17:46:32 -05:00
nfs3proc.c NFSv3: Convert nfs3_proc_access() to use nfs_access_set_mask() 2017-07-21 11:51:19 -04:00
nfs3super.c nfsv3: introduce nfs3_set_ds_client 2015-02-03 11:06:34 -08:00
nfs3xdr.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
nfs4_fs.h NFSv4.1: don't use machine credentials for CLOSE when using 'sec=sys' 2017-08-20 12:43:17 -04:00
nfs4client.c NFSv4: Fix double frees in nfs4_test_session_trunk() 2017-08-02 09:45:55 -04:00
nfs4file.c NFSv4: add flock_owner to open context 2016-12-01 17:57:27 -05:00
nfs4getroot.c NFS: Clean up nfs4_get_rootfh() 2017-04-20 13:39:35 -04:00
nfs4idmap.c NFS: silence a uninitialized variable warning 2017-07-13 15:58:28 -04:00
nfs4idmap.h NFS: Move nfs_idmap.h into fs/nfs/ 2015-04-23 15:16:14 -04:00
nfs4namespace.c NFS: Remove extra dprintk()s from nfs4namespace.c 2017-04-20 13:39:35 -04:00
nfs4proc.c NFS: remove jiffies field from access cache 2017-09-06 12:32:37 -04:00
nfs4renewd.c NFSv4: Set the connection timeout to match the lease period 2017-02-09 14:15:16 -05:00
nfs4session.c NFSv4.1: Fix regression in callback retry handling 2016-12-01 17:21:38 -05:00
nfs4session.h NFS: Make trace_nfs4_setup_sequence() available to NFS v4.0 2017-01-30 13:14:50 -05:00
nfs4state.c NFS client updates for Linux 4.13 2017-07-13 14:35:37 -07:00
nfs4super.c NFS: Move nfs_idmap.h into fs/nfs/ 2015-04-23 15:16:14 -04:00
nfs4sysctl.c nfs: do not initialise statics to 0 2015-12-28 09:57:15 -05:00
nfs4trace.c pNFS: Modify pnfs_update_layout tracepoints to use layout stateid 2015-12-28 09:57:14 -05:00
nfs4trace.h nfs4: add NFSv4 LOOKUPP handlers 2017-07-13 16:00:15 -04:00
nfs4xdr.c NFSv4: Fix EXCHANGE_ID corrupt verifier issue 2017-08-01 16:28:55 -04:00
nfs42.h NFS: Add COPY nfs operation 2016-05-17 15:47:55 -04:00
nfs42proc.c NFSv4.2 fix size storage for nfs42_proc_copy 2017-07-13 16:00:14 -04:00
nfs42xdr.c nfs: fix decoder callback prototypes 2017-07-13 15:57:56 -04:00
nfs.h
nfsroot.c nfsroot: make nfsroot to accept the 1024 bytes long directory name 2015-10-21 15:49:19 -05:00
nfstrace.c NFSv4: Allow tracing of NFSv4 fsync calls 2015-03-27 12:39:34 -04:00
nfstrace.h NFS client updates for Linux 4.8 2016-07-30 16:33:25 -07:00
pagelist.c Merge branch 'bugfixes' 2017-08-20 13:04:12 -04:00
pnfs_dev.c NFSv4.1: Don't cache deviceids that have no notifications 2015-03-27 12:32:24 -04:00
pnfs_nfs.c NFS: Wait for requests that are locked on the commit list 2017-08-15 11:54:48 -04:00
pnfs.c NFSv4/pnfs: Replace pnfs_put_lseg_locked() with pnfs_put_lseg() 2017-08-15 11:54:48 -04:00
pnfs.h NFSv4/pnfs: Replace pnfs_put_lseg_locked() with pnfs_put_lseg() 2017-08-15 11:54:48 -04:00
proc.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
read.c NFS: Remove unused parameter gfp_flags from nfs_pageio_init() 2017-08-20 11:35:33 -04:00
super.c NFS: Fix NFSv2 security settings 2017-08-20 12:43:34 -04:00
symlink.c vfs: remove ".readlink = generic_readlink" assignments 2016-12-09 16:45:04 +01:00
sysctl.c
unlink.c NFS: nfs_rename() - revalidate directories on -ERESTARTSYS 2017-07-13 15:58:04 -04:00
write.c NFS: don't expect errors from mempool_alloc(). 2017-09-06 12:31:15 -04:00