From ad36b84a27d049ce09369d6a951d06ac30cee454 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Sun, 21 Jun 2026 19:43:16 +0200 Subject: [PATCH] classifier: Handle invalid page mapping The page mapping may be non-NULL but invalid. Check it properly. Signed-off-by: Robert Baldyga --- modules/cas_cache/classifier.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/cas_cache/classifier.c b/modules/cas_cache/classifier.c index 10e7159d2..e66f67dcd 100644 --- a/modules/cas_cache/classifier.c +++ b/modules/cas_cache/classifier.c @@ -48,6 +48,8 @@ static cas_cls_eval_t _cas_cls_metadata_test(struct cas_classifier *cls, struct cas_cls_condition *c, struct cas_cls_io *io, ocf_part_id_t part_id) { + struct address_space *mapping; + if (!io->page) return cas_cls_eval_no; @@ -62,9 +64,10 @@ static cas_cls_eval_t _cas_cls_metadata_test(struct cas_classifier *cls, return cas_cls_eval_yes; } - if (!cas_page_mapping(io->page)) { - /* XFS case, page are allocated internally and do not - * have references into inode + mapping = cas_page_mapping(io->page); + if (!mapping || !virt_addr_valid(mapping)) { + /* XFS case: page is allocated internally without a page + * cache mapping. */ return cas_cls_eval_yes; } @@ -1284,6 +1287,9 @@ static void _cas_cls_get_bio_context(struct bio *bio, if (!mapping) return; + if (!virt_addr_valid(mapping)) + return; + ctx->inode = mapping->host; return;