diff options
author | David Howells <dhowells@redhat.com> | 2020-10-26 16:57:44 +0300 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2020-10-29 16:53:04 +0300 |
commit | 65dd2d6072d393a3aa14ded8afa9a12f27d9c8ad (patch) | |
tree | d05f48830cd9ed16f4d45926b4a8a965fa503ee7 /include | |
parent | 185f0c7073bd5c78f86265f703f5daf1306ab5a7 (diff) | |
download | linux-65dd2d6072d393a3aa14ded8afa9a12f27d9c8ad.tar.xz |
afs: Alter dirty range encoding in page->private
Currently, page->private on an afs page is used to store the range of
dirtied data within the page, where the range includes the lower bound, but
excludes the upper bound (e.g. 0-1 is a range covering a single byte).
This, however, requires a superfluous bit for the last-byte bound so that
on a 4KiB page, it can say 0-4096 to indicate the whole page, the idea
being that having both numbers the same would indicate an empty range.
This is unnecessary as the PG_private bit is clear if it's an empty range
(as is PG_dirty).
Alter the way the dirty range is encoded in page->private such that the
upper bound is reduced by 1 (e.g. 0-0 is then specified the same single
byte range mentioned above).
Applying this to both bounds frees up two bits, one of which can be used in
a future commit.
This allows the afs filesystem to be compiled on ppc32 with 64K pages;
without this, the following warnings are seen:
../fs/afs/internal.h: In function 'afs_page_dirty_to':
../fs/afs/internal.h:881:15: warning: right shift count >= width of type [-Wshift-count-overflow]
881 | return (priv >> __AFS_PAGE_PRIV_SHIFT) & __AFS_PAGE_PRIV_MASK;
| ^~
../fs/afs/internal.h: In function 'afs_page_dirty':
../fs/afs/internal.h:886:28: warning: left shift count >= width of type [-Wshift-count-overflow]
886 | return ((unsigned long)to << __AFS_PAGE_PRIV_SHIFT) | from;
| ^~
Fixes: 4343d00872e1 ("afs: Get rid of the afs_writeback record")
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'include')
0 files changed, 0 insertions, 0 deletions