From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C1428E7717F for ; Tue, 17 Dec 2024 15:51:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D06776B0082; Tue, 17 Dec 2024 10:51:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id CB4E46B0083; Tue, 17 Dec 2024 10:51:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B556E6B0085; Tue, 17 Dec 2024 10:51:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 905F06B0082 for ; Tue, 17 Dec 2024 10:51:35 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 0104B1C5BF9 for ; Tue, 17 Dec 2024 15:51:34 +0000 (UTC) X-FDA: 82904889942.30.F258ABF Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) by imf13.hostedemail.com (Postfix) with ESMTP id 4B81C20007 for ; Tue, 17 Dec 2024 15:51:03 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=3QOYlCfa; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf13.hostedemail.com: domain of surenb@google.com designates 209.85.160.175 as permitted sender) smtp.mailfrom=surenb@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1734450679; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=wwo8OHNODHGIPbbawFUW6IeO7l6xrNKTiC2R4EB9I2w=; b=MYFrvAz5410xQud3jBDdsj3uF0HaS1tWPjGBxBcRasslvRFPe2INrkNjj9NGy+k+EWqTkX KIqJT2qNdMckoEt+Wt8f49C6ua79Flo/alt+gcJSWVBDaFeVWIOFO5jFzrL/IYVDymL4Nq inTrDpR4+pYxZ9NQEgKok4Kb2vPxe3I= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734450679; a=rsa-sha256; cv=none; b=IHW2JpjgrDws7NRsTAKuWfHk8Y5J92GfOR1x1IgmF5b8JF4DKNJsP8SI29x6kivLLxoobc ergaNGV3ACA8Yc6uRnO7dmkKtJASrYUVI18wHm3J5RzHxmrCQsqy3guaghidSqm58bySWS dOP5FTpxyeFz5TWHAJc0AfhC63Q1nug= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=3QOYlCfa; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf13.hostedemail.com: domain of surenb@google.com designates 209.85.160.175 as permitted sender) smtp.mailfrom=surenb@google.com Received: by mail-qt1-f175.google.com with SMTP id d75a77b69052e-4679b5c66d0so239391cf.1 for ; Tue, 17 Dec 2024 07:51:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1734450692; x=1735055492; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=wwo8OHNODHGIPbbawFUW6IeO7l6xrNKTiC2R4EB9I2w=; b=3QOYlCfaBr6Vr6DdVLQVs6CQ5rrVs8kG8YTXRyiNYu2OX2pPOJWFAFD2EMkfaGwJZ1 j0cGjsf9zx7gxcMP6+9jK3xDiF8yBBlkhnA8c9fQwDHxAnqRMV5crvesDhEZkazu8iPP /cNufMnVaRwqg9CgcWqwV1OeJ9gYnvduP94nI1iL/VtL2Bf4nvkMBSyRvWkzHp2tzhqw IlX6Z7gWPgzQSamJNmpgflXx9uxu+3vZD8i/aAEO9WL5wLmKi4hL76hB5KVNiSkzKlMN dPDzfokZTr8bo6P23hECrnIYmPVSD8m8qXKMWdgfR3PRfv9qftEGMDiFP6bMtOJgKNsu B0+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734450692; x=1735055492; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wwo8OHNODHGIPbbawFUW6IeO7l6xrNKTiC2R4EB9I2w=; b=oLF9QDB2CGR5S1tiskmzgN/j3stmF4ruIaHXhLc6R32Zt+fIpVVljG4mVYzpgx8+2Q CQYuIrj5uQ1GuS/V2cYpKSRENOQGMHRJxEP9sIHXrHJU0oEGZzSRUHRawlMAcCGAyMLF VYg9jVQoDzM6qHYocrjWvjO88KO0SwjVTq+hXaHFDVO9xFB8gm58JWGO1/8YlkJLanRH JZHgVXsITSMgl7tH70tvGXfOHGcAa5rK00UxIXu2+aiaR7O9JtCKWV8AWSrN8lyZdD7F wLOSkW874KHLqZstPaiMNhJAR97Oy/IHnNLqEd93SBT5z5BNPWLsGkDc9JCA4mQVFGvm SYbw== X-Forwarded-Encrypted: i=1; AJvYcCVx0x0kdI8zvIUDJfbTs0KeUuEuWdOKZMc3v6Sd9U2D7aIlK4iOfctr+9oMRfYiGzNU86L/z4EkxA==@kvack.org X-Gm-Message-State: AOJu0YzaEI/QP175C3B2oWS/2Z476U+5JkzQTbxDccLQfpt9BgTp3na3 SC5fwB2OZBZaInUqi5jmcsNZN1m/TVnYlwYiofCFownOJskaCoyPP/GHe7F58JktkHDiwlH84we FqSJ+21KmVqMLtba7Hh7yNLt1WRVMQd1Fwx1S X-Gm-Gg: ASbGncsC6Vd+YSc1SHNwmo1dSPSRKbiEP3X1OLWj/x7IHIx1xsQDB02ltMTjK8E2LFI DkGqRWzPYxD04dLlf0soJbFTFXLkJyYXbnFxZ7unROQz7U0BVAuFtym/hVyxAhR7NA26A X-Google-Smtp-Source: AGHT+IEYYI+WVDOgTkdZqyIgQrd+MbF6i5eCTFLllBwis6eAgYhXVpj3HLVdgfiBc7hLCuPBK2IZh8GparcPVeH/kqA= X-Received: by 2002:a05:622a:386:b0:466:91fd:74c0 with SMTP id d75a77b69052e-468f95b1a20mr4693301cf.0.1734450692037; Tue, 17 Dec 2024 07:51:32 -0800 (PST) MIME-Version: 1.0 References: <20241216192419.2970941-1-surenb@google.com> <20241216192419.2970941-7-surenb@google.com> In-Reply-To: From: Suren Baghdasaryan Date: Tue, 17 Dec 2024 07:51:21 -0800 Message-ID: Subject: Re: [PATCH v6 06/16] mm: allow vma_start_read_locked/vma_start_read_locked_nested to fail To: Lokesh Gidra Cc: akpm@linux-foundation.org, peterz@infradead.org, willy@infradead.org, liam.howlett@oracle.com, lorenzo.stoakes@oracle.com, mhocko@suse.com, vbabka@suse.cz, hannes@cmpxchg.org, mjguzik@gmail.com, oliver.sang@intel.com, mgorman@techsingularity.net, david@redhat.com, peterx@redhat.com, oleg@redhat.com, dave@stgolabs.net, paulmck@kernel.org, brauner@kernel.org, dhowells@redhat.com, hdanton@sina.com, hughd@google.com, minchan@google.com, jannh@google.com, shakeel.butt@linux.dev, souravpanda@google.com, pasha.tatashin@soleen.com, klarasmodin@gmail.com, corbet@lwn.net, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@android.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: o7p4jxs5tas3auc33fjix6bsbe1hcp4m X-Rspamd-Queue-Id: 4B81C20007 X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1734450663-558001 X-HE-Meta: U2FsdGVkX1+ti+cVsdGqIx/BraQaS9JKU/e6Tv3nNiL2/NMTscGdTMmS153R5c3v2ucVHLL0LMx56sKPMn3qgBjwp8ZcrSxAGej031CQLRA4zRJxMYd//py/ipFz4EXPMNZJpqJ7MPhylWpgRHuin1M8OQ2n69uXuKoI1v/THw5zbh1C3Be0JFHTtSs2E8rcqztPYPlBuVAiV7am1Of1jw8U5kMdKhFmMekrP/Nwvx7XhGcniSljCKybF7wi6R/9NyT/0tBpLPZ9sRfVgNuhKlpV+Z5H6tBppxYEGrYOiKVAJZD31dYhbRlUBIFqPlTwVReJY/Kq7nwZL4AcO+LKAitOAch2IUgLeGxVOVyfkngzfiM+2CKCdsT3WRbSDheSGYQi9tKbk4gmekZ6sklxT48ZymEAHw2Ug0G+dElOve/+wkMgtIZm+0QReFFpogqidOP7s4yu4/M9aR9cn3lfjkscjf7Mfn/mZIJomvCUaQVpc6yNIR+BI+GTFjTO74ADli0Rx+czIybo5stQOaOnB0NXBzHGnII8uyhzk5NHH2jNVOx2c7+q8pDknI1KTTG/6jnZiX1dRblpoM/JR/WqUJZWGYHBXK6eKMjShh7uoZU//je9v6n2HF8s1kmi8m6RD/PLsy7cFZG32PFLM2B09s1IfS9LZZiCwF8QU+s6bOtiHF8TulxPDUNh1aO1ByfMf6XGf+jWwPkxdCgICUMjmGIiP7fwym0RYas3wPuteBfSUhenNc7aV2WmmvNjQca5ANqerSRU7e8UbuUbL9e9qEpyMVWLP+YFIbIouAmuUdJKovCDkMuwqR9Zy36IILp6MrexNno1jP04RKo/sLV8KeitL6MZMWgTvKBbP41eUcqh6I+BejK2afdTuzMhBesNqZfRaYe+XEQaQYUswdBe3voX/iFq5MUq/as6JooK1NjXgeAbFqYke1SWYRXe/jrSIPSa3+5GEQkacSHTrNT 3CGSetQk tR8rjN78t6GQRAc0WxgoQiD3RPMODxFy0PgQCHIq9qGvMR3qTzybMATuqIPPURAZlV74zs3k8EE2j4fY+r351R+3EcNMFyc8TAFIt5au/5rY8GodkTjT3Korn7GXbPnruj3DHyOTvDcE/MgtQYGeSSDrwvRyjZkMn3gbH9R1wW9G3+GGCqndfsz/cyY0gBE9cKf51ln6CFsBjL3vZLgPEAz/4t9par3u/cNKqg+LbRFC78gLw8Zl06eL727K+96W/dU/1RfePmgjFYGNunvUBqqmohRO9eDx0kKLTY4oY4MKkKZE= X-Bogosity: Ham, tests=bogofilter, spamicity=0.023979, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Dec 17, 2024 at 3:31=E2=80=AFAM Lokesh Gidra wrote: > > On Mon, Dec 16, 2024 at 11:24=E2=80=AFAM Suren Baghdasaryan wrote: > > > > With upcoming replacement of vm_lock with vm_refcnt, we need to handle = a > > possibility of vma_start_read_locked/vma_start_read_locked_nested faili= ng > > due to refcount overflow. Prepare for such possibility by changing thes= e > > APIs and adjusting their users. > > > > Signed-off-by: Suren Baghdasaryan > > Cc: Lokesh Gidra > > --- > > include/linux/mm.h | 6 ++++-- > > mm/userfaultfd.c | 17 ++++++++++++----- > > 2 files changed, 16 insertions(+), 7 deletions(-) > > > > diff --git a/include/linux/mm.h b/include/linux/mm.h > > index 689f5a1e2181..0ecd321c50b7 100644 > > --- a/include/linux/mm.h > > +++ b/include/linux/mm.h > > @@ -747,10 +747,11 @@ static inline bool vma_start_read(struct vm_area_= struct *vma) > > * not be used in such cases because it might fail due to mm_lock_seq = overflow. > > * This functionality is used to obtain vma read lock and drop the mma= p read lock. > > */ > > -static inline void vma_start_read_locked_nested(struct vm_area_struct = *vma, int subclass) > > +static inline bool vma_start_read_locked_nested(struct vm_area_struct = *vma, int subclass) > > { > > mmap_assert_locked(vma->vm_mm); > > down_read_nested(&vma->vm_lock.lock, subclass); > > + return true; > > } > > > > /* > > @@ -759,10 +760,11 @@ static inline void vma_start_read_locked_nested(s= truct vm_area_struct *vma, int > > * not be used in such cases because it might fail due to mm_lock_seq = overflow. > > * This functionality is used to obtain vma read lock and drop the mma= p read lock. > > */ > > -static inline void vma_start_read_locked(struct vm_area_struct *vma) > > +static inline bool vma_start_read_locked(struct vm_area_struct *vma) > > { > > mmap_assert_locked(vma->vm_mm); > > down_read(&vma->vm_lock.lock); > > + return true; > > } > > > > static inline void vma_end_read(struct vm_area_struct *vma) > > diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c > > index bc9a66ec6a6e..79e8ae676f75 100644 > > --- a/mm/userfaultfd.c > > +++ b/mm/userfaultfd.c > > @@ -85,7 +85,8 @@ static struct vm_area_struct *uffd_lock_vma(struct mm= _struct *mm, > > mmap_read_lock(mm); > > vma =3D find_vma_and_prepare_anon(mm, address); > > if (!IS_ERR(vma)) > > - vma_start_read_locked(vma); > > + if (!vma_start_read_locked(vma)) > > + vma =3D ERR_PTR(-EAGAIN); > > > > mmap_read_unlock(mm); > > return vma; > > @@ -1483,10 +1484,16 @@ static int uffd_move_lock(struct mm_struct *mm, > > mmap_read_lock(mm); > > err =3D find_vmas_mm_locked(mm, dst_start, src_start, dst_vmap,= src_vmap); > > if (!err) { > > - vma_start_read_locked(*dst_vmap); > > - if (*dst_vmap !=3D *src_vmap) > > - vma_start_read_locked_nested(*src_vmap, > > - SINGLE_DEPTH_NESTING); > > + if (!vma_start_read_locked(*dst_vmap)) { > > I think you mistakenly reversed the condition. This block should be > executed if we manage to lock dst_vma successfully. Oops. Sorry, you are right. That above condition should have been reversed. I'll fix it in the next revision. Thanks! > > + if (*dst_vmap !=3D *src_vmap) { > > + if (!vma_start_read_locked_nested(*src_= vmap, > > + SINGLE_DEPTH_NE= STING)) { > > + vma_end_read(*dst_vmap); > > + err =3D -EAGAIN; > > + } > > + } > > + } else > > + err =3D -EAGAIN; > > } > > mmap_read_unlock(mm); > > return err; > > -- > > 2.47.1.613.gc27f4b7a9f-goog > >