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 9C104C6FA99 for ; Fri, 10 Mar 2023 12:31:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DFEE56B0072; Fri, 10 Mar 2023 07:31:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DAD236B0074; Fri, 10 Mar 2023 07:31:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C26566B0075; Fri, 10 Mar 2023 07:31:29 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id AE4426B0072 for ; Fri, 10 Mar 2023 07:31:29 -0500 (EST) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 7C0771C6061 for ; Fri, 10 Mar 2023 12:31:29 +0000 (UTC) X-FDA: 80552924298.26.129D198 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by imf20.hostedemail.com (Postfix) with ESMTP id B614E1C001D for ; Fri, 10 Mar 2023 12:31:27 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=Ie4VgVCd; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf20.hostedemail.com: domain of error27@gmail.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=error27@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1678451487; 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:in-reply-to: references:dkim-signature; bh=dUgS6YBGsuU86bBAaH9fpem9xqs5tGVev/lJU7Wn4Bk=; b=mX41PvkzeidgMgpyjzb8NZalRcf7ljowMNGnqofF70f5aQms2gUiigeKGDnU/9iRtm2ctq hVPOmFuUWz4R6vbNkuzdWDzUDCigFRb87P+eSl3gdx3iW1J6JqcaD8bgzShYLrguHTxxTe NFhRjcPH23paWsMXxewtFT07MDcuXaI= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=Ie4VgVCd; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf20.hostedemail.com: domain of error27@gmail.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=error27@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1678451487; a=rsa-sha256; cv=none; b=ZvB9BI75/91hnK/ttl/7R0IOeZwPlCtsgfLEvu+OtALf4CT759i2VEiPdVCX4elpOA7Yre ZLpvI7jaIGRVc7P8/JlFoPgOfxXzN750/Wn46N1GuPNtUTHXVy1Ofg87kavGREMKpcBF9C r7DsCStLUYzDrG8pVN8vJ3oqYueeRM4= Received: by mail-wm1-f52.google.com with SMTP id l7-20020a05600c4f0700b003e79fa98ce1so3322802wmq.2 for ; Fri, 10 Mar 2023 04:31:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678451486; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=dUgS6YBGsuU86bBAaH9fpem9xqs5tGVev/lJU7Wn4Bk=; b=Ie4VgVCdV6TPqnlGkkumuOvdzHyUYF4FiINp00OxkTs4yrHi68CcrpcBkqNraJKchS FmSgLZRmC9fO04gd9fC2gcSSoN7J/7z32QZLk/gjZUFo5z82ThJw0t8EeaBWIEmMXl0l 43pCV+Tau509MGeE2jXdFaDBDzeBSnysRhmGMC04r0CxqO0L9qSfUVnZ1t4dlvHVVpRB EvcBk7bT6TJ/2ugeAhfzxmoDi95SdBUvrEN9icKfkWtlTfmOUsq9h/Ha8Hn9W++44RAt Kr8Lp/uZya3c+moDuakX5NX5aSm0f3NfZo2Fvc76QJDs0jKRmb7a+eGb3e46KBuDNXAr A6wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678451486; h=content-disposition:mime-version:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=dUgS6YBGsuU86bBAaH9fpem9xqs5tGVev/lJU7Wn4Bk=; b=Dh9x2ErpIzxtq1vJ72psuEJFvDUNYDVLexaQsqlL1csTosYFqjE+0rY1ImbqW39OOP 6dKY339RqoSGEYVSHUaDZ/gZMwdxGbmYnTZfSxYpb7fsNF/ryruIfzzhu9C7jWFX43ap Z81qsXKm3Ps+AljKbEMg0Nakk/y7vjFekRA8bL7PP4hMw96L6c8WSdwISbxGfJpT+pju K861vslmmwO0K/VH8fzJdgeXAD2MirZAhm/dM1wUdU3/Kgi2ZZ03quT/7xt0Yl9YMEv8 BT5Hll0wP1AirkmwCX8FbufmJH7ECz1Q6+aQtnKE4/Lv0zChTf/skxaKHlpI88JQd30Y qvpw== X-Gm-Message-State: AO0yUKWoXIJrNXrlg7wOqgCB3AanyLP7wGskLAdQ6OETJC6wtVpaSmwO MIjf1BP6MD3UjjIXM1AjFS4= X-Google-Smtp-Source: AK7set+AyeSjNW3ecwRLWhaMmqQXoA7Tsbs7kV29TzftqM/EqAObuEgN6pL33XjXJVQUpoU7k8gR/Q== X-Received: by 2002:a05:600c:1c95:b0:3eb:2b69:c3c6 with SMTP id k21-20020a05600c1c9500b003eb2b69c3c6mr2484356wms.1.1678451486171; Fri, 10 Mar 2023 04:31:26 -0800 (PST) Received: from localhost ([102.36.222.112]) by smtp.gmail.com with ESMTPSA id z9-20020a05600c114900b003e21f01c426sm2028314wmz.9.2023.03.10.04.31.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Mar 2023 04:31:25 -0800 (PST) Date: Fri, 10 Mar 2023 15:31:22 +0300 From: Dan Carpenter To: hch@lst.de Cc: linux-mm@kvack.org Subject: [bug report] mm: return an ERR_PTR from __filemap_get_folio Message-ID: <3d6c0208-e254-4169-92ab-8b83ac114d85@kili.mountain> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-Rspamd-Queue-Id: B614E1C001D X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: y4w86cesimu7sjx9sxkbecawphg3zd7t X-HE-Tag: 1678451487-549518 X-HE-Meta: U2FsdGVkX1+ZIumbjPTPQoCmhCfD20lvI4snsnKymq9xuBbLbNxsa1xUOhH0xGmzfAxCj1HUdl5yfhxhPVoumna+jZeR+ZZnGNcxaIwgddpuKiYTP+tXIM0EMqb6yofwijpbqnSLT0HuqsTfF8p/nJuF5g6bt7NAhGZKUEFPYDhBM2ktMvxQKcOrOIzf+S0aOMxPjt+OayTJCV9iW6zIkgRNEIeCcQ0XHPONNM/MkZzkg3DkfAWExe6+uOUVd/FsScLjoN8ntbGy6LfDoZfXLAKFj3lVww6SBsiPQsFj+QEfrsDZg+YEiGa90nhg1yw1HowPOBOGAow+g5h9vFIpdZEVsiaQBS8/3l9jCg7pl/4HmCadca2zfuucfOORtKcHUQtd6RBQxhWnXs9FtZguntyLyCoL0sCSy90abBsPdxROlZBM2CEwsqDRZdllg6qEAeQ+xOPDlz5cVNlhvWNxYp2Iae30HTSqD1/ympK3etyImpLnb8t9OYr3qJ4WhrNpoC4jLbGnCXna27BLyejY+Bwtwab5KofIIx7c+Eef78SmYgyU5pTDwMQ7AduCCOsquFalSuLbtFYN/SkXWNfJXwUtZACS44NOzWzEvdzscQ1yqFNyIFMI3KMKeA0a0llNTRI1Q1R0mN1zHMOAhtEm7evIzG9R0CJSi30EdmvpdBryBYCjB2TvUEIF4jCriJuo16xT386Ss3akJWLnFz77jpWHmhv3Kc/Yq23+Yu8iqnGtl99jfLQ2zJEfBnueiXjWf+DkWm99NoXP2ASa9g8R8psT2Hn92IhpcFkH/oj2f+SRxvigOB+KUOobnqHxT8F7+9exqcWtcVuW+8M0QonpVzKAR8RbrYc0WzjltN1XlS26Ju6OyovL3jPheBtbV9QNDvTi0l9/rPyNseeI5kWsKKe+IrHqLKhAQZEo3xmr7OADFbiccZRDXQdT/oH+zXnJKYxQzGYBohrHiAO7F6o WNZZBpD7 tS5c7uyS7KbD/A65YyfQLdozlAzl4dxzELvjt0BbH3mtKzi7f+ytzF41Ti5osm96qPU8ih8ZSvfILRYiFp61eB4J2q5GZ8CC2rsqW2ocLVZF5BlcURrGIiM83RpGlQWBSpbx2Z22hri+8pCe3YCQJWdSFIyGj5C7eEXNzrZdm+zrIP2CdCVMQwTI2vzQ1pL34r7XuhrM3ZGrGBUdI/oQaAaXGMdBDBgGJfErvqkTMmnwC6f4IFPQaL61AmRpiI8QELDOMgiyh+gXi/P4BG7ctmWdVZUrw6lE8X1qNpiZypNNljKnBvNEVcYwyfcQyfzKGu+PhUUuzDBmtfqzi9q5B7BsJ+01kENnKfz8NpdP68l43dPUlH9kKGDlfTSQWuIoy7WuqEcldPs12tLKIS/BFPlRiurhODQvp0SbIaAWZCRddyimdek7C9bE4zaYvMzlRwDIt X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hello Christoph Hellwig, The patch 480c454ff64b: "mm: return an ERR_PTR from __filemap_get_folio" from Mar 7, 2023, leads to the following Smatch static checker warning: mm/filemap.c:3381 filemap_fault() warn: 'folio' is an error pointer or valid mm/filemap.c 3262 folio = filemap_get_folio(mapping, index); 3263 if (likely(!IS_ERR(folio))) { 3264 /* 3265 * We found the page, so try async readahead before waiting for 3266 * the lock. 3267 */ 3268 if (!(vmf->flags & FAULT_FLAG_TRIED)) 3269 fpin = do_async_mmap_readahead(vmf, folio); 3270 if (unlikely(!folio_test_uptodate(folio))) { 3271 filemap_invalidate_lock_shared(mapping); 3272 mapping_locked = true; 3273 } 3274 } else { 3275 /* No page in the page cache at all */ 3276 count_vm_event(PGMAJFAULT); 3277 count_memcg_event_mm(vmf->vma->vm_mm, PGMAJFAULT); 3278 ret = VM_FAULT_MAJOR; 3279 fpin = do_sync_mmap_readahead(vmf); 3280 retry_find: 3281 /* 3282 * See comment in filemap_create_folio() why we need 3283 * invalidate_lock 3284 */ 3285 if (!mapping_locked) { 3286 filemap_invalidate_lock_shared(mapping); 3287 mapping_locked = true; 3288 } 3289 folio = __filemap_get_folio(mapping, index, 3290 FGP_CREAT|FGP_FOR_MMAP, 3291 vmf->gfp_mask); This function was changed to return error pointers instead of NULL. 3292 if (IS_ERR(folio)) { 3293 if (fpin) 3294 goto out_retry; 3295 filemap_invalidate_unlock_shared(mapping); 3296 return VM_FAULT_OOM; 3297 } 3298 } 3299 3300 if (!lock_folio_maybe_drop_mmap(vmf, folio, &fpin)) 3301 goto out_retry; 3302 3303 /* Did it get truncated? */ 3304 if (unlikely(folio->mapping != mapping)) { 3305 folio_unlock(folio); 3306 folio_put(folio); 3307 goto retry_find; 3308 } 3309 VM_BUG_ON_FOLIO(!folio_contains(folio, index), folio); 3310 3311 /* 3312 * We have a locked page in the page cache, now we need to check 3313 * that it's up-to-date. If not, it is going to be due to an error. 3314 */ 3315 if (unlikely(!folio_test_uptodate(folio))) { 3316 /* 3317 * The page was in cache and uptodate and now it is not. 3318 * Strange but possible since we didn't hold the page lock all 3319 * the time. Let's drop everything get the invalidate lock and 3320 * try again. 3321 */ 3322 if (!mapping_locked) { 3323 folio_unlock(folio); 3324 folio_put(folio); 3325 goto retry_find; 3326 } 3327 goto page_not_uptodate; 3328 } 3329 3330 /* 3331 * We've made it this far and we had to drop our mmap_lock, now is the 3332 * time to return to the upper layer and have it re-find the vma and 3333 * redo the fault. 3334 */ 3335 if (fpin) { 3336 folio_unlock(folio); 3337 goto out_retry; 3338 } 3339 if (mapping_locked) 3340 filemap_invalidate_unlock_shared(mapping); 3341 3342 /* 3343 * Found the page and have a reference on it. 3344 * We must recheck i_size under page lock. 3345 */ 3346 max_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE); 3347 if (unlikely(index >= max_idx)) { 3348 folio_unlock(folio); 3349 folio_put(folio); 3350 return VM_FAULT_SIGBUS; 3351 } 3352 3353 vmf->page = folio_file_page(folio, index); 3354 return ret | VM_FAULT_LOCKED; 3355 3356 page_not_uptodate: 3357 /* 3358 * Umm, take care of errors if the page isn't up-to-date. 3359 * Try to re-read it _once_. We do this synchronously, 3360 * because there really aren't any performance issues here 3361 * and we need to check for errors. 3362 */ 3363 fpin = maybe_unlock_mmap_for_io(vmf, fpin); 3364 error = filemap_read_folio(file, mapping->a_ops->read_folio, folio); 3365 if (fpin) 3366 goto out_retry; 3367 folio_put(folio); 3368 3369 if (!error || error == AOP_TRUNCATED_PAGE) 3370 goto retry_find; 3371 filemap_invalidate_unlock_shared(mapping); 3372 3373 return VM_FAULT_SIGBUS; 3374 3375 out_retry: 3376 /* 3377 * We dropped the mmap_lock, we need to return to the fault handler to 3378 * re-find the vma and come back and find our hopefully still populated 3379 * page. 3380 */ 3381 if (folio) ^^^^^ Should this be !IS_ERR() now? 3382 folio_put(folio); 3383 if (mapping_locked) 3384 filemap_invalidate_unlock_shared(mapping); 3385 if (fpin) 3386 fput(fpin); 3387 return ret | VM_FAULT_RETRY; 3388 } regards, dan carpenter