diff options
-rw-r--r-- | fs/nfs/write.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 77a00c66c7d9..a44a87268a6e 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c | |||
@@ -922,19 +922,20 @@ out: | |||
922 | * extend the write to cover the entire page in order to avoid fragmentation | 922 | * extend the write to cover the entire page in order to avoid fragmentation |
923 | * inefficiencies. | 923 | * inefficiencies. |
924 | * | 924 | * |
925 | * If the file is opened for synchronous writes or if we have a write delegation | 925 | * If the file is opened for synchronous writes then we can just skip the rest |
926 | * from the server then we can just skip the rest of the checks. | 926 | * of the checks. |
927 | */ | 927 | */ |
928 | static int nfs_can_extend_write(struct file *file, struct page *page, struct inode *inode) | 928 | static int nfs_can_extend_write(struct file *file, struct page *page, struct inode *inode) |
929 | { | 929 | { |
930 | if (file->f_flags & O_DSYNC) | 930 | if (file->f_flags & O_DSYNC) |
931 | return 0; | 931 | return 0; |
932 | if (!nfs_write_pageuptodate(page, inode)) | ||
933 | return 0; | ||
932 | if (NFS_PROTO(inode)->have_delegation(inode, FMODE_WRITE)) | 934 | if (NFS_PROTO(inode)->have_delegation(inode, FMODE_WRITE)) |
933 | return 1; | 935 | return 1; |
934 | if (nfs_write_pageuptodate(page, inode) && (inode->i_flock == NULL || | 936 | if (inode->i_flock == NULL || (inode->i_flock->fl_start == 0 && |
935 | (inode->i_flock->fl_start == 0 && | ||
936 | inode->i_flock->fl_end == OFFSET_MAX && | 937 | inode->i_flock->fl_end == OFFSET_MAX && |
937 | inode->i_flock->fl_type != F_RDLCK))) | 938 | inode->i_flock->fl_type != F_RDLCK)) |
938 | return 1; | 939 | return 1; |
939 | return 0; | 940 | return 0; |
940 | } | 941 | } |