mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 03:35:32 -04:00
dax: fix misleading comment about share/index union in dax_folio_reset_order()
The comment in dax_folio_reset_order() claims that DAX maintains an
invariant where folio->share != 0 only when folio->mapping == NULL,
implying folio->share is zero whenever mapping is non-NULL. This is
misleading because folio->share and folio->index are a union -- for
non-shared folios with mapping != NULL, reading folio->share returns
the file page offset (folio->index), which is typically non-zero.
Reword the comment to accurately describe the union aliasing: the
assignment clears whichever interpretation of the union word is active
(index for non-shared folios, share for shared folios), which is correct
because the folio is being released in either case.
No functional change -- the code was already correct, only the
justification was wrong.
Fixes: 59eb73b98a ("dax: Factor out dax_folio_reset_order() helper")
Reviewed-by: Jonathan Cameron <jic23@kernel.org>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Alison Schofield <alison.schofield@intel.com>
Signed-off-by: John Groves <john@groves.net>
Link: https://patch.msgid.link/0100019ecc08b8cd-4ee80eeb-1341-4f67-8478-7298129440e9-000000@email.amazonses.com
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
This commit is contained in:
committed by
Alison Schofield
parent
6a1f2e5ed9
commit
3fc3ebf40b
12
fs/dax.c
12
fs/dax.c
@@ -392,12 +392,12 @@ int dax_folio_reset_order(struct folio *folio)
|
||||
int order = folio_order(folio);
|
||||
|
||||
/*
|
||||
* DAX maintains the invariant that folio->share != 0 only when
|
||||
* folio->mapping == NULL (enforced by dax_folio_make_shared()).
|
||||
* Equivalently: folio->mapping != NULL implies folio->share == 0.
|
||||
* Callers ensure share has been decremented to zero before
|
||||
* calling here, so unconditionally clearing both fields is
|
||||
* correct.
|
||||
* Clear the mapping and the index/share union word. folio->share
|
||||
* and folio->index occupy the same union in struct folio. For
|
||||
* non-shared folios (mapping != NULL), the union holds folio->index
|
||||
* (file page offset); for shared folios (mapping == NULL), it holds
|
||||
* folio->share (reference count). Either way, we are releasing the
|
||||
* folio and both fields should be zeroed.
|
||||
*/
|
||||
folio->mapping = NULL;
|
||||
folio->share = 0;
|
||||
|
||||
Reference in New Issue
Block a user