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 9917AE7717F for ; Tue, 17 Dec 2024 11:31:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1954E6B00BD; Tue, 17 Dec 2024 06:31:34 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 145BC6B00BE; Tue, 17 Dec 2024 06:31:34 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F00496B00C0; Tue, 17 Dec 2024 06:31:33 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id D1B3C6B00BD for ; Tue, 17 Dec 2024 06:31:33 -0500 (EST) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 8EC1D1406A0 for ; Tue, 17 Dec 2024 11:31:33 +0000 (UTC) X-FDA: 82904234490.07.A33AF35 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) by imf23.hostedemail.com (Postfix) with ESMTP id 718B5140021 for ; Tue, 17 Dec 2024 11:31:11 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=ybuXEFhO; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of lokeshgidra@google.com designates 209.85.160.181 as permitted sender) smtp.mailfrom=lokeshgidra@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734435063; a=rsa-sha256; cv=none; b=YohPJzTGgGN2ZxNXqABQ12J6gfKaS4u3/v1uJnG7w7XToHzwOY8TAH/2IRklpzFP6AUEwf Bu7dvxTV/mBCaYQw05QAptb8S++FYoZlP/pEX9muvbrjhDWeyoCwwNlLpS0qwxUrlZXSxk FQv49Ow4uhi3Zs9blDs1LiBfsc7RLAA= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=ybuXEFhO; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf23.hostedemail.com: domain of lokeshgidra@google.com designates 209.85.160.181 as permitted sender) smtp.mailfrom=lokeshgidra@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1734435063; 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=vD8eqn9xKjeqPVrsxuP1cvZSPzizQuDJa3iQ6IuBE7k=; b=eh2WoumS4A6vjtsRJn0gPjOGpYrtr2JEM6i3fAplf8EuZCIsVNxa3ynpUfKN7eGVYB3wjN PZ2OkLBLyFs3vdHXIFm61ZgFOtBSdn30RqgiCQf6NyoxXFaQezEjZgt/UjqiQxzUOLQn7Q E4L1rMeXilXZh5o/aaAhwa+bVZ7WW/4= Received: by mail-qt1-f181.google.com with SMTP id d75a77b69052e-467896541e1so224091cf.0 for ; Tue, 17 Dec 2024 03:31:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1734435091; x=1735039891; 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=vD8eqn9xKjeqPVrsxuP1cvZSPzizQuDJa3iQ6IuBE7k=; b=ybuXEFhOawE3Y7N8stFF8k8+LDTx49sYUkpO59vJjOC+ekCmzkOG55MYumYwqtDo2F 0Ik28+evkDynesZSiAp5BYA8TTp4d9mmwwMshP/6NorHnFD1vQOnudQrSyNiawm6EIRc vDT+r3RCPchcaboxdziw1s0AHGJQKk7yYaIxPigCHuUSp5t12bcGociu4TlUQbaVsyqr mZIToDa+diCvmM/0Xa6AdoQQDKkT+oNI2zOriKNj6uF+ziQ8Mtw7SboTlkdycGeV1y3L f078tUCuEu7q5zLPJZ4OIxAN/Tgmemt21DRjHhJxMW5vgs5Nu/vl0t1uQSBEKTwZc+Lw AD3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734435091; x=1735039891; 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=vD8eqn9xKjeqPVrsxuP1cvZSPzizQuDJa3iQ6IuBE7k=; b=NIJ0//pWLpsZR3vyxlA5ZLs0QEyHjgvpLrqVigYi7LJ1rfGBjzSlXH6BNpVm4rtQhB xc/T0P38V4E4iYwG2IRKZVPQS7ybIEn/EQdj1HEt+ClQU/OhNIr0nk0gXb9BwOak4g7w 1oH0ci0P1y8pe5lU3ruX4srzoksjAQUnyG5MqeMZ6ok/c1ovp2+8hPttcDJRUfgO5ia8 B+hVN0RwncM8jfLfenY4LzWny2VPsrjrrDNMAcfFT8dvXuMKaHXxkNNCuRbudRjfvlqn sxc0iMD1qYEfQGwYlQfXpuxjkzsijhHrtOLRPdFMltcdwVk4MM8yoC8BC9QGP2toYXif y+Pg== X-Forwarded-Encrypted: i=1; AJvYcCWTcZrWdeibCN4z2o6uU1A7jyTTBVZBznHiiZ9Y6ZSl3cLs2TFXv2BpNIxcq0x67YJctetcWCobLg==@kvack.org X-Gm-Message-State: AOJu0Yx/YlvHk++6YFO/WQfnaVnRUr7iWqew8I12eQZjiIyXJA0+BnIV 27hIk8P8icJzvtI5lWcT4pb7dIdUaMhAL8BncJykg3TvHCeikyvXGVWbiRUvPowjtxBYvzCnI3a n7c50afyKhjkSMBXgGaSmKkPTiQ+3pHVMNCJ+ X-Gm-Gg: ASbGncs7AGnRelNgUHJ9ds/L2GHX6rxgZ0O6/FKSB28hK0a4KYfhGGl6gmJdY+5bIGE WrCj0YvKqGXdTOqwE7A6BhVGrQJtQPJF3+RBE2qs= X-Google-Smtp-Source: AGHT+IHKHu1IRkhxrihYEwIoqAnGLbuaLzSRpS59Zb04zfEsWUbH7MON2gLm1HCEqY0IL9x+918vOzmCLcWI+leDoFU= X-Received: by 2002:ac8:5816:0:b0:466:8e4d:e981 with SMTP id d75a77b69052e-468fb0a6adfmr2640361cf.3.1734435090631; Tue, 17 Dec 2024 03:31:30 -0800 (PST) MIME-Version: 1.0 References: <20241216192419.2970941-1-surenb@google.com> <20241216192419.2970941-7-surenb@google.com> In-Reply-To: <20241216192419.2970941-7-surenb@google.com> From: Lokesh Gidra Date: Tue, 17 Dec 2024 03:31:17 -0800 X-Gm-Features: AbW1kvY337jQ0-Qj_UJ_IHTN8osVIPvR_DR3TuoCbJLAyvPh6j1Kj7s-4brW2z4 Message-ID: Subject: Re: [PATCH v6 06/16] mm: allow vma_start_read_locked/vma_start_read_locked_nested to fail To: Suren Baghdasaryan 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-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 718B5140021 X-Stat-Signature: cq7m9xnphhg3b37mp3ipg5wb4a9znomc X-Rspam-User: X-HE-Tag: 1734435071-996531 X-HE-Meta: U2FsdGVkX1+HyT8uy3u6djzIWi7/NwtPGIbgmpS8isamgmMpUUXVNnGaEnePVjfi8li9H3TRegYrtsj3XmrHAgmSAdzxG1GfdI3lx++y03vqoj0PiO09U+3fF1+sMd12Us9PNTGUUXuLnGlpbtY0Ua35ASamcQRNXGEJb4kMkXwNjiefc67KEVmhOjzrnqiAYCs14TbkqzwWW9INNAkUxrGfPVBjA9zINTa2xEf5+fztJy8YufZK7SugV1atsVYJiK6nZnOy9dTubGyXp+nV3NZfiOPSW6u3FmLWEgq2EK8XEc52CZ5/hz9q7WiupypLKX0tWMuws6t91uDqQZv0o0iWvQG/SuyDDCIWGSi03hoB4oJpxfHgKPaE6MAwrbYOCQUdpOS4w6O9m5HiGY1+2wB4h3frsHc1mAR11sy/OyU6QBV18lVi6fYZRQk1ClJ3WR4o6u/cZcobl3EE/IVh3e2tMFCXZGKixa5l+Qkkinv2mutPOXdjkq8btvk2pVcZlbZrK39k4PNJmcxa8s9jcppSqfy+AdoWecT6Ssk57frR2wIoGwhAP4J4gYDKg3IE2ffAVwbeyGL8ReYEaSJdRIcMujjzYmkAJsze4vUfz2dfuAf6fP/++Q/ecytnSYjCxg03urI4RKvcO2TviSywdQ3H7kJhS9FCZ1nUH+UlRdjwAzBuDZjpYa6T7FRYOgAPSBeuqkwY2hqyhiEoOsh+Oqi90EH5VpSm8oLyLLgGIUGkgVuWAoAfBMcXo6PxHOxBgHN1ziQs4FvjHIhVYeOnPRUUO8N7bRztqTizoPT0CgyMywTcyXfNO3RC5ZaE7u7SYHeXploopATCxYBP7/smz0H8IsP6aOiS546ZCNXNSU8B7L621zvCDesWSK1MRLCQr5oAfw3YsE8NQIztNibGXSeSqc1+zDX8ZW1Nxu+coZtoqOMIHqKfZgW88sbxY9d2P5HbeXj3PUppGnBZV+f DtiBq6xN r+CzLRgSc62F7gSbKGCwiHKMvNa8G0d50LRK02O9JGee9Gn0R1ZePjyXcWkcoJIdp/31wVFZezkCgzVjwyHHRzHmKcx6kit+F0DVqV3vdVEs6q+EGs73gQJU3ZpH1flUq7fPlb52N/llq/fIOeLu489Uof5GtVakouATiUU+v+N/hlBmkyFsW3ttSl22uTMjjQ4QCtkKcqY5Z6VQEeCEV+SVmJMcte2WF3E4odeSDyAhAwvP3lsXdbUbUjxmYVhHHDUtSxbc8rznf2DU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.039270, 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 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 failing > due to refcount overflow. Prepare for such possibility by changing these > 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_st= ruct *vma) > * not be used in such cases because it might fail due to mm_lock_seq ov= erflow. > * This functionality is used to obtain vma read lock and drop the mmap = read lock. > */ > -static inline void vma_start_read_locked_nested(struct vm_area_struct *v= ma, int subclass) > +static inline bool vma_start_read_locked_nested(struct vm_area_struct *v= ma, 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(str= uct vm_area_struct *vma, int > * not be used in such cases because it might fail due to mm_lock_seq ov= erflow. > * This functionality is used to obtain vma read lock and drop the mmap = 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_s= truct *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, s= rc_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. > + if (*dst_vmap !=3D *src_vmap) { > + if (!vma_start_read_locked_nested(*src_vm= ap, > + SINGLE_DEPTH_NEST= ING)) { > + vma_end_read(*dst_vmap); > + err =3D -EAGAIN; > + } > + } > + } else > + err =3D -EAGAIN; > } > mmap_read_unlock(mm); > return err; > -- > 2.47.1.613.gc27f4b7a9f-goog >