From patchwork Mon Dec 26 11:08:09 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Borisov X-Patchwork-Id: 9488591 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 882D960839 for ; Mon, 26 Dec 2016 11:08:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 78EC51FF26 for ; Mon, 26 Dec 2016 11:08:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6BC381FFC9; Mon, 26 Dec 2016 11:08:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9EFD61FF26 for ; Mon, 26 Dec 2016 11:08:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932526AbcLZLIW (ORCPT ); Mon, 26 Dec 2016 06:08:22 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33386 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932336AbcLZLIV (ORCPT ); Mon, 26 Dec 2016 06:08:21 -0500 Received: by mail-wm0-f67.google.com with SMTP id u144so52617222wmu.0 for ; Mon, 26 Dec 2016 03:08:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=fll+k+alim5nnpn8i4127qv6PfZKqE3nS1DNXU8iaUc=; b=pMhIz7xxWuOt4ShgsFT1mffCXNaGkv//32XwPUQ/hLWrPgSdxCUHzXLD10y5AMUCIQ BYpTV8XerNDaNLP/dJGQwnqimWax8e1Waz7zt5Ksn6UBQksIFVlrzB9Dz+HwdF/JdyCV 529hVv+mrGtCdrPnNkswTK507COdq8P3NI/BurwAgD4bqcPIMZdoZpPy2sNespkKvH+s RQ8qFwQzocAR760mZoXp3yFrOkR+tvZ1toqfNvum1aEvep0IDZTYOe/Q3QdYM3Bh/IZx wi3ctrdHZKMSnigPYPyTRfqKrljwXg2VMk3TC3zxDrMv+Fh9T+nJuHYueMz9w2makfkF ZFAw== 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; bh=fll+k+alim5nnpn8i4127qv6PfZKqE3nS1DNXU8iaUc=; b=LkRPhTlOOdTXQx1o7UsFnnProPmDqt8YSIQQ/0408TZo9cH8+jLsm99k0p19UWRxui ktQP+7jvfqei1/KjpNusOwQNuKjSW4wb98iWdUf5POGxtPZ1ZORqMe0OvN06SwFkppby Dn8e0WavzIP6rMvjxPpo+0p2LlLUzFxI2VWVxCBhuuN+IklEIfJoRcrNMlLeg3RR2UY/ mcAWYXo/LEWs51SmDNBTPCFxnQ6LcbNWRYWizjAtBy2G1JiHuFvBMHTfbgEZYCYUFlqG lm1Vtf2u/Idrx4Mu1SMhVC/TC0mTsh4/XAj8WFet8SR7/Jl69bIz0ZwlBqgngnJgc6C0 3B7A== X-Gm-Message-State: AIkVDXK7fvjwOQ49Siw5XqgCmfof9416FjozlpHJxyliHI3Vn7TdoTCmT3qsbd4jE10xyQ== X-Received: by 10.28.95.193 with SMTP id t184mr17641323wmb.93.1482750499577; Mon, 26 Dec 2016 03:08:19 -0800 (PST) Received: from localhost.localdomain (ivokamnl.ddns.nbis.net. [87.120.136.64]) by smtp.gmail.com with ESMTPSA id l6sm51014732wmd.5.2016.12.26.03.08.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 26 Dec 2016 03:08:19 -0800 (PST) From: Nikolay Borisov To: linux-btrfs@vger.kernel.org Cc: clm@fb.com, jbacik@fb.com, dsterba@suse.com, Nikolay Borisov Subject: [PATCH] btrfs: Replace ACCESS_ONCE with (READ|WRITE)_ONCE Date: Mon, 26 Dec 2016 13:08:09 +0200 Message-Id: <1482750489-13666-1-git-send-email-n.borisov.lkml@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Use the newer and standardized functions when performing volatile accesses. Following text is taken from 4d3199e4ca8e ("locking: Remove ACCESS_ONCE() usage") : ACCESS_ONCE() does not work reliably on non-scalar types. For example gcc 4.6 and 4.7 might remove the volatile tag for such accesses during the SRA (scalar replacement of aggregates) step: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145 Signed-off-by: Nikolay Borisov --- fs/btrfs/delayed-inode.c | 4 ++-- fs/btrfs/super.c | 2 +- fs/btrfs/transaction.c | 10 +++++----- fs/btrfs/tree-log.h | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 80982a83c9fd..353e40fceba8 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c @@ -79,7 +79,7 @@ static struct btrfs_delayed_node *btrfs_get_delayed_node(struct inode *inode) u64 ino = btrfs_ino(inode); struct btrfs_delayed_node *node; - node = ACCESS_ONCE(btrfs_inode->delayed_node); + node = READ_ONCE(btrfs_inode->delayed_node); if (node) { atomic_inc(&node->refs); return node; @@ -1292,7 +1292,7 @@ void btrfs_remove_delayed_node(struct inode *inode) { struct btrfs_delayed_node *delayed_node; - delayed_node = ACCESS_ONCE(BTRFS_I(inode)->delayed_node); + delayed_node = READ_ONCE(BTRFS_I(inode)->delayed_node); if (!delayed_node) return; diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index b5ae7d3d1896..93ed29c2a38b 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -265,7 +265,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans, function, line, errstr); return; } - ACCESS_ONCE(trans->transaction->aborted) = errno; + WRITE_ONCE(trans->transaction->aborted, errno); /* Wake up anybody who may be waiting on this transaction */ wake_up(&fs_info->transaction_wait); wake_up(&fs_info->transaction_blocked_wait); diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 0e0508f488b2..bd2890c2c9d3 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -866,14 +866,14 @@ static int __btrfs_end_transaction(struct btrfs_trans_handle *trans, if (lock && !atomic_read(&info->open_ioctl_trans) && should_end_transaction(trans) && - ACCESS_ONCE(cur_trans->state) == TRANS_STATE_RUNNING) { + READ_ONCE(cur_trans->state) == TRANS_STATE_RUNNING) { spin_lock(&info->trans_lock); if (cur_trans->state == TRANS_STATE_RUNNING) cur_trans->state = TRANS_STATE_BLOCKED; spin_unlock(&info->trans_lock); } - if (lock && ACCESS_ONCE(cur_trans->state) == TRANS_STATE_BLOCKED) { + if (lock && READ_ONCE(cur_trans->state) == TRANS_STATE_BLOCKED) { if (throttle) return btrfs_commit_transaction(trans); else @@ -1940,7 +1940,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) int ret; /* Stop the commit early if ->aborted is set */ - if (unlikely(ACCESS_ONCE(cur_trans->aborted))) { + if (unlikely(READ_ONCE(cur_trans->aborted))) { ret = cur_trans->aborted; btrfs_end_transaction(trans); return ret; @@ -2080,7 +2080,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) atomic_read(&cur_trans->num_writers) == 1); /* ->aborted might be set after the previous check, so check it */ - if (unlikely(ACCESS_ONCE(cur_trans->aborted))) { + if (unlikely(READ_ONCE(cur_trans->aborted))) { ret = cur_trans->aborted; goto scrub_continue; } @@ -2194,7 +2194,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) * The tasks which save the space cache and inode cache may also * update ->aborted, check it. */ - if (unlikely(ACCESS_ONCE(cur_trans->aborted))) { + if (unlikely(READ_ONCE(cur_trans->aborted))) { ret = cur_trans->aborted; mutex_unlock(&fs_info->tree_log_mutex); mutex_unlock(&fs_info->reloc_mutex); diff --git a/fs/btrfs/tree-log.h b/fs/btrfs/tree-log.h index ab858e31ccbc..127eae01bb1b 100644 --- a/fs/btrfs/tree-log.h +++ b/fs/btrfs/tree-log.h @@ -48,13 +48,13 @@ static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx, static inline void btrfs_set_log_full_commit(struct btrfs_fs_info *fs_info, struct btrfs_trans_handle *trans) { - ACCESS_ONCE(fs_info->last_trans_log_full_commit) = trans->transid; + WRITE_ONCE(fs_info->last_trans_log_full_commit, trans->transid); } static inline int btrfs_need_log_full_commit(struct btrfs_fs_info *fs_info, struct btrfs_trans_handle *trans) { - return ACCESS_ONCE(fs_info->last_trans_log_full_commit) == + return READ_ONCE(fs_info->last_trans_log_full_commit) == trans->transid; }