From patchwork Fri Mar 27 17:06:53 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 6110841 Return-Path: X-Original-To: patchwork-linux-nfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 0C406BF90F for ; Fri, 27 Mar 2015 17:07:00 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2FDCF2037E for ; Fri, 27 Mar 2015 17:06:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4BA0F20251 for ; Fri, 27 Mar 2015 17:06:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751904AbbC0RG5 (ORCPT ); Fri, 27 Mar 2015 13:06:57 -0400 Received: from mail-ie0-f176.google.com ([209.85.223.176]:36433 "EHLO mail-ie0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751902AbbC0RG4 (ORCPT ); Fri, 27 Mar 2015 13:06:56 -0400 Received: by iedm5 with SMTP id m5so75556455ied.3 for ; Fri, 27 Mar 2015 10:06:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=B9k4rvnTvXDllxfUifIS4Fr3T2jO83gpT+AYD4nRUQc=; b=M3JRQ9I+IGiMnWoZvXgIEm1dbXSc7LMAcD1rmi12RHhETwSw0zV7uJpbjwDYrF+A8C WYBnF4XHDOTtYxxTz+Ah91t3JqAGB5GNIQx/W3CX2bmMk0IToaW6jd/6xMFiEoTRnjEq iEaaXU+5bYaW7e5ZwIF9grK/iJAITW/goZ88Db1h8+FCBjFUABTclH+ySsOyNYuZcco9 WMoBYUdTKZJ+0rsFHb1IPbAkd9hF5IfFg6KAfiOC9df2jwaTXthRaZYrvd40G10DDcY/ iYyhS/dVOvl3qpmxvTJ8p4fKlyMZofBKqNhzOzPMgB8j0cbIyLv/aAiX6rcSV2JpQasb Z0Hw== X-Gm-Message-State: ALoCoQmQ/KzX7LGPImTPkAGv93kis8MLMA4uI9UpjleGbg1gBuLfQq0nMzofl4Xe9tj3DSRyMuGC X-Received: by 10.107.148.198 with SMTP id w189mr31592673iod.14.1427476015580; Fri, 27 Mar 2015 10:06:55 -0700 (PDT) Received: from leira.trondhjem.org.localdomain (c-98-250-104-235.hsd1.mi.comcast.net. [98.250.104.235]) by mx.google.com with ESMTPSA id s7sm1667264ioi.15.2015.03.27.10.06.54 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 27 Mar 2015 10:06:54 -0700 (PDT) From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH] NFSv4.1/pnfs: Ensure that writes respect the O_SYNC flag when doing O_DIRECT Date: Fri, 27 Mar 2015 13:06:53 -0400 Message-Id: <1427476013-14683-1-git-send-email-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the caller does not specify the O_SYNC flag, then it is legitimate to return from O_DIRECT without doing a pNFS layoutcommit operation. However if the file is opened O_DIRECT|O_SYNC then we'd better get it right. Signed-off-by: Trond Myklebust --- fs/nfs/direct.c | 1 + fs/nfs/file.c | 1 + fs/nfs/nfs4file.c | 1 + 3 files changed, 3 insertions(+) diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 51f617e45fd1..018a06a062bd 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -1034,6 +1034,7 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter, if (i_size_read(inode) < iocb->ki_pos) i_size_write(inode, iocb->ki_pos); spin_unlock(&inode->i_lock); + generic_write_sync(file, pos, result); } } nfs_direct_req_release(dreq); diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 6959cb76744b..28228f381266 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -281,6 +281,7 @@ nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync) trace_nfs_fsync_enter(inode); + nfs_inode_dio_wait(inode); do { ret = filemap_write_and_wait_range(inode->i_mapping, start, end); if (ret != 0) diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c index 8da5409e6f1a..befe7a2c6284 100644 --- a/fs/nfs/nfs4file.c +++ b/fs/nfs/nfs4file.c @@ -104,6 +104,7 @@ nfs4_file_fsync(struct file *file, loff_t start, loff_t end, int datasync) trace_nfs_fsync_enter(inode); + nfs_inode_dio_wait(inode); do { ret = filemap_write_and_wait_range(inode->i_mapping, start, end); if (ret != 0)