Received: by 10.223.185.111 with SMTP id b44csp1645572wrg; Sat, 10 Mar 2018 10:29:37 -0800 (PST) X-Google-Smtp-Source: AG47ELt2uvA+dvAIfJV5DuGVC75JJsc0i+J4QJBVU0ckNu76fuiZr/QiFlq6cFPKJ3SNLFsHmpUk X-Received: by 10.99.60.8 with SMTP id j8mr2232770pga.209.1520706577324; Sat, 10 Mar 2018 10:29:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520706577; cv=none; d=google.com; s=arc-20160816; b=vx1zArrpQzisi2nVr0Eu0CMT458R/bvOu9Bn4IGdkFKT/HhbURdAHu0yMADVv/SDXK 48t16m3zuWRVxIlU12c3J3iodoD3GQAA90M3n+YIT17EHj243AZadhAjiPsW3jqZSfXz fymtDDzCa1pfa4Y13tdW9+ZEk8Z8sv5FODXO118GnZWJ6X2fTJQxMKPEOXkN5sUNpwj6 +B3akf7on1R8a36MotptBXLZ7pFEN3+D9fCXNCBHnKJJwuCo18heivi9oYFG9rPBk/3R H4QtJqcgGshSqLCthEyyX9UD1Z86QVjiFYhZFUDZh1lC+dR3q17trTEqxdPigKOerFUV 6yNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=aHhVoo/2mwYBUNkfDWI29mhPXaLgSbjbR5jOhMq3j98=; b=giNxHw06obrj8PdYt5s5kDTZtT6jEClc8peBczKT0WCsvp4qptfor/RFL360+Y4LaI sQQy2+NVjDDMqVgzecC1bqeErNeHUF5/pKPz3BVZoDCEbeByUhHRTcjJvoaKTEX+BhSd CjLuUbmJVUzn48TZEz5bUc0GawpDWQw6TeQcjC3JlM41oqX4jyUlAb2l7orPq1cz3PPc y9vH9w3GNXp1uYdFAZVo1aeIHLXxYDCnfXCi/kHn4PbDoa6yX6GXzPeq8uxPG/vTohYn iB0hKyWbTcXbIBRCfB+adxkwWRMxOV0NyoGiSvIbSzMNAbqQouRuGpjl1EojwQB+Egg9 dyBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@eng.ucsd.edu header.s=google header.b=SuVl52gr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 33-v6si3109321plt.429.2018.03.10.10.29.23; Sat, 10 Mar 2018 10:29:37 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@eng.ucsd.edu header.s=google header.b=SuVl52gr; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932819AbeCJSVg (ORCPT + 99 others); Sat, 10 Mar 2018 13:21:36 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:42611 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932783AbeCJSVe (ORCPT ); Sat, 10 Mar 2018 13:21:34 -0500 Received: by mail-pf0-f193.google.com with SMTP id a16so2614888pfn.9 for ; Sat, 10 Mar 2018 10:21:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eng.ucsd.edu; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=aHhVoo/2mwYBUNkfDWI29mhPXaLgSbjbR5jOhMq3j98=; b=SuVl52grORQW/8KG//qPQlGlbg0ChhHM+yBRdzJXjYvfbVTZ2IohBBkwvx6tdl7qAX lQQU5kQQzhwShODX5G3oaAVMqRl991Ynmd5FktiJmv532EiuRIiLSK54Q+pe2SHvSydM dKxTU91DIjcorV/DQlj7AVEHR76rCOXLOMj+M= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=aHhVoo/2mwYBUNkfDWI29mhPXaLgSbjbR5jOhMq3j98=; b=UIn9Y3Ej7SdDyCRKPGAy9EmpbKha0iAt+ShcRxoMRZ96DKX0rko5IZS331hqtQNF8E 9gAJ3wg5NYPNHnbhgnsbQYoFcp3ARCBWzr+h1dEgKnA9h7+YLal9AZrlIAUQwLw5q1SM 8mQALvvKSqyIHq6AnS1IRCRpkvr9lOquo3DvunP3knE69EmET6TvZRX5KZEfeXqpCi9v gHFvJhy50Vq9Mt7t1059XmRhrqX3Ih8pnbdqG+FhkVItvWCc5pjWMBStY7pFNXNHKyea QANmGk8wrGpi828K6xskn6XYnPUJISphU3PtdrZ+DEc8f1fCxJAmoY7mP/HxiU0Hf3Dn I6ug== X-Gm-Message-State: AElRT7HlmKBudNwLqc+WRAGzkaF3806waGAQpNW5SEyH4sDXw4hw1z0T bEf5kE9lSKrsEvyM1EYTxDoYlQ== X-Received: by 10.99.60.72 with SMTP id i8mr2165127pgn.399.1520706093453; Sat, 10 Mar 2018 10:21:33 -0800 (PST) Received: from brienza-desktop.8.8.4.4 (andxu.ucsd.edu. [132.239.17.134]) by smtp.gmail.com with ESMTPSA id h80sm9210167pfj.181.2018.03.10.10.21.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 10 Mar 2018 10:21:32 -0800 (PST) From: Andiry Xu To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nvdimm@lists.01.org Cc: dan.j.williams@intel.com, andy.rudoff@intel.com, coughlan@redhat.com, swanson@cs.ucsd.edu, david@fromorbit.com, jack@suse.com, swhiteho@redhat.com, miklos@szeredi.hu, andiry.xu@gmail.com, Andiry Xu Subject: [RFC v2 64/83] File operation: open, fsync, flush. Date: Sat, 10 Mar 2018 10:18:45 -0800 Message-Id: <1520705944-6723-65-git-send-email-jix024@eng.ucsd.edu> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1520705944-6723-1-git-send-email-jix024@eng.ucsd.edu> References: <1520705944-6723-1-git-send-email-jix024@eng.ucsd.edu> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andiry Xu NOVA persists file metadata and data before returning to the user space. Hence, fsync is a no-op if the file is not mmaped. Signed-off-by: Andiry Xu --- fs/nova/file.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/fs/nova/file.c b/fs/nova/file.c index ecaf20a..f60fdf3 100644 --- a/fs/nova/file.c +++ b/fs/nova/file.c @@ -66,9 +66,59 @@ static loff_t nova_llseek(struct file *file, loff_t offset, int origin) return offset; } +/* This function is called by both msync() and fsync(). + * TODO: Check if we can avoid calling nova_flush_buffer() for fsync. We use + * movnti to write data to files, so we may want to avoid doing unnecessary + * nova_flush_buffer() on fsync() + */ +static int nova_fsync(struct file *file, loff_t start, loff_t end, int datasync) +{ + struct address_space *mapping = file->f_mapping; + unsigned long start_pgoff, end_pgoff; + int ret = 0; + timing_t fsync_time; + + NOVA_START_TIMING(fsync_t, fsync_time); + + if (datasync) + NOVA_STATS_ADD(fdatasync, 1); + + /* No need to flush if the file is not mmaped */ + if (!mapping_mapped(mapping)) + goto persist; + + start_pgoff = start >> PAGE_SHIFT; + end_pgoff = (end + 1) >> PAGE_SHIFT; + nova_dbgv("%s: msync pgoff range %lu to %lu\n", + __func__, start_pgoff, end_pgoff); + + ret = generic_file_fsync(file, start, end, datasync); + +persist: + PERSISTENT_BARRIER(); + NOVA_END_TIMING(fsync_t, fsync_time); + + return ret; +} + +/* This callback is called when a file is closed */ +static int nova_flush(struct file *file, fl_owner_t id) +{ + PERSISTENT_BARRIER(); + return 0; +} + +static int nova_open(struct inode *inode, struct file *filp) +{ + return generic_file_open(inode, filp); +} + const struct file_operations nova_dax_file_operations = { .llseek = nova_llseek, + .open = nova_open, + .fsync = nova_fsync, + .flush = nova_flush, }; const struct inode_operations nova_file_inode_operations = { -- 2.7.4