• David Howells's avatar
    afs: Alter dirty range encoding in page->private · 65dd2d60
    David Howells authored
    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: 4343d008 ("afs: Get rid of the afs_writeback record")
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    65dd2d60
write.c 22.4 KB