Hello Alistair Popple,

Commit 9c4409f51aa3 ("fs/dax: properly refcount fs dax pages") from
Jan 7, 2025 (linux-next), leads to the following Smatch static
checker warning:

        fs/dax.c:379 dax_folio_share_put()
        warn: unsigned 'ref' is never less than zero.

fs/dax.c
    370 static inline unsigned long dax_folio_share_put(struct folio *folio)
    371 {
    372         unsigned long ref;
    373 
    374         if (!dax_folio_is_shared(folio))
    375                 ref = 0;
    376         else
    377                 ref = --folio->share;
    378 
--> 379         WARN_ON_ONCE(ref < 0);
                             ^^^^^^^
impossible

    380         if (!ref) {
    381                 folio->mapping = NULL;
    382                 if (folio_order(folio)) {
    383                         struct dev_pagemap *pgmap = 
page_pgmap(&folio->page);
    384                         unsigned int order = folio_order(folio);
    385                         unsigned int i;
    386 
    387                         for (i = 0; i < (1UL << order); i++) {
    388                                 struct page *page = folio_page(folio, 
i);
    389 
    390                                 ClearPageHead(page);
    391                                 clear_compound_head(page);
    392 
    393                                 /*
    394                                  * Reset pgmap which was over-written by
    395                                  * prep_compound_page().
    396                                  */
    397                                 page_folio(page)->pgmap = pgmap;
    398 
    399                                 /* Make sure this isn't set to 
TAIL_MAPPING */
    400                                 page->mapping = NULL;
    401                                 page->share = 0;
    402                                 WARN_ON_ONCE(page_ref_count(page));
    403                         }
    404                 }
    405         }
    406 
    407         return ref;
    408 }

regards,
dan carpenter

Reply via email to