Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp690729ybz; Fri, 1 May 2020 06:54:01 -0700 (PDT) X-Google-Smtp-Source: APiQypKKewYTMzJ0cXL9+MNTodsaPPGCMy58yKetW4VYt1nOYv8/XlG92mahG5kCW3kbwqAOJVjd X-Received: by 2002:a05:6402:1515:: with SMTP id f21mr3686028edw.370.1588341241681; Fri, 01 May 2020 06:54:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588341241; cv=none; d=google.com; s=arc-20160816; b=qB+3vwjGNCl/5HPnnt/xmPRb/A76UlQp5E4z9NGa12//lbn9y3V7P4plv3AW7maFWL IrqREIeUwt377UPVSDZKiPikQOiiTJWpqkC+O0vp/ZkGf1XExZrhMHIMJCwup/tZ9j3Z ++ZlU2hNeNHaF0yygJ2d/wtevEaBF+/e/j6wGt0o9cvxqC7MVOjGPy+16a3oLJA5Nuph bMdQihl1lUW9ilYDba7Dk71GZxM7H4pxo0B0HeCO/AEexdjuHaIijEdkozn6Ga9VOcMb UG20FfGjMR8/O4Ji6P6ZBy9J+K5Bbwu3fztz3je2CUfEr+z41EyKhJzIS/TGU5M70hHf XWWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=3GmDZGaoSWBDEDRuNjngZOVSkeWxtBevgogVByGFky8=; b=C+QtTS9eiuE+ipQUYPPSszASOsiP8zz0gtpOK3KKqBm8iELzSJWmWgM45ycIlmZgAr u5e2SEawuNyxiyTtPfUn3svcCSQFxxEgtWpdXbboXQwVNc6G/Ka6FFpIRK101Wrig32f j5Qfh0MhMZQiIoQG+lrTfOyknbx5UnIQ0aSSVCeTFKwE1zD4S8Y/fjKTDYl7pUozzMG8 3WArWUAfysTU+kP0CbNStPA5Ns1E+5Wi59JajqpILnTcOQh6UNOXtb89o4GEH03QdrOr w4XFGb2L3K9obXFyT/w4SOz3heCF953mMD9kpY7QChnMN2z/gr3W9Aq9qvs19jYu9E85 shNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=10kRtdvO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ci23si1727541ejb.133.2020.05.01.06.53.39; Fri, 01 May 2020 06:54:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=10kRtdvO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731045AbgEANiP (ORCPT + 99 others); Fri, 1 May 2020 09:38:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:37558 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730559AbgEANiH (ORCPT ); Fri, 1 May 2020 09:38:07 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CBFBB2495A; Fri, 1 May 2020 13:38:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588340287; bh=m7bzB9tw6FZxxGihc9Ubkc7PbQKMA5YE/tNYYYCeUVI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=10kRtdvODAe6TjI2/RDiJ9TisoFPgVJbne8eIUWar2koVd6Qe6qQr+75Zkb42ue+m 1kysRjGHn+bvGvpk9cIzUPspLVAWZvzVfi3q/Kp5wfoPUhe+piz1jGWhqGq921tWOf sy9i13KLbVHFtTMOjhfF8LQSmuLlrGEaNAFHMtiI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, David Howells Subject: [PATCH 5.4 09/83] afs: Make record checking use TASK_UNINTERRUPTIBLE when appropriate Date: Fri, 1 May 2020 15:22:48 +0200 Message-Id: <20200501131526.199725271@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200501131524.004332640@linuxfoundation.org> References: <20200501131524.004332640@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: David Howells commit c4bfda16d1b40d1c5941c61b5aa336bdd2d9904a upstream. When an operation is meant to be done uninterruptibly (such as FS.StoreData), we should not be allowing volume and server record checking to be interrupted. Fixes: d2ddc776a458 ("afs: Overhaul volume and server record caching and fileserver rotation") Signed-off-by: David Howells Signed-off-by: Greg Kroah-Hartman --- fs/afs/internal.h | 2 +- fs/afs/rotate.c | 6 +++--- fs/afs/server.c | 7 ++----- fs/afs/volume.c | 8 +++++--- 4 files changed, 11 insertions(+), 12 deletions(-) --- a/fs/afs/internal.h +++ b/fs/afs/internal.h @@ -1329,7 +1329,7 @@ extern struct afs_volume *afs_create_vol extern void afs_activate_volume(struct afs_volume *); extern void afs_deactivate_volume(struct afs_volume *); extern void afs_put_volume(struct afs_cell *, struct afs_volume *); -extern int afs_check_volume_status(struct afs_volume *, struct key *); +extern int afs_check_volume_status(struct afs_volume *, struct afs_fs_cursor *); /* * write.c --- a/fs/afs/rotate.c +++ b/fs/afs/rotate.c @@ -192,7 +192,7 @@ bool afs_select_fileserver(struct afs_fs write_unlock(&vnode->volume->servers_lock); set_bit(AFS_VOLUME_NEEDS_UPDATE, &vnode->volume->flags); - error = afs_check_volume_status(vnode->volume, fc->key); + error = afs_check_volume_status(vnode->volume, fc); if (error < 0) goto failed_set_error; @@ -281,7 +281,7 @@ bool afs_select_fileserver(struct afs_fs set_bit(AFS_VOLUME_WAIT, &vnode->volume->flags); set_bit(AFS_VOLUME_NEEDS_UPDATE, &vnode->volume->flags); - error = afs_check_volume_status(vnode->volume, fc->key); + error = afs_check_volume_status(vnode->volume, fc); if (error < 0) goto failed_set_error; @@ -341,7 +341,7 @@ start: /* See if we need to do an update of the volume record. Note that the * volume may have moved or even have been deleted. */ - error = afs_check_volume_status(vnode->volume, fc->key); + error = afs_check_volume_status(vnode->volume, fc); if (error < 0) goto failed_set_error; --- a/fs/afs/server.c +++ b/fs/afs/server.c @@ -595,12 +595,9 @@ retry: } ret = wait_on_bit(&server->flags, AFS_SERVER_FL_UPDATING, - TASK_INTERRUPTIBLE); + (fc->flags & AFS_FS_CURSOR_INTR) ? + TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); if (ret == -ERESTARTSYS) { - if (!(fc->flags & AFS_FS_CURSOR_INTR) && server->addresses) { - _leave(" = t [intr]"); - return true; - } fc->error = ret; _leave(" = f [intr]"); return false; --- a/fs/afs/volume.c +++ b/fs/afs/volume.c @@ -281,7 +281,7 @@ error: /* * Make sure the volume record is up to date. */ -int afs_check_volume_status(struct afs_volume *volume, struct key *key) +int afs_check_volume_status(struct afs_volume *volume, struct afs_fs_cursor *fc) { time64_t now = ktime_get_real_seconds(); int ret, retries = 0; @@ -299,7 +299,7 @@ retry: } if (!test_and_set_bit_lock(AFS_VOLUME_UPDATING, &volume->flags)) { - ret = afs_update_volume_status(volume, key); + ret = afs_update_volume_status(volume, fc->key); clear_bit_unlock(AFS_VOLUME_WAIT, &volume->flags); clear_bit_unlock(AFS_VOLUME_UPDATING, &volume->flags); wake_up_bit(&volume->flags, AFS_VOLUME_WAIT); @@ -312,7 +312,9 @@ retry: return 0; } - ret = wait_on_bit(&volume->flags, AFS_VOLUME_WAIT, TASK_INTERRUPTIBLE); + ret = wait_on_bit(&volume->flags, AFS_VOLUME_WAIT, + (fc->flags & AFS_FS_CURSOR_INTR) ? + TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE); if (ret == -ERESTARTSYS) { _leave(" = %d", ret); return ret;