summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/afs/internal.h6
-rw-r--r--fs/afs/write.c2
2 files changed, 4 insertions, 4 deletions
diff --git a/fs/afs/internal.h b/fs/afs/internal.h
index edaccd07e18e..344c545f934c 100644
--- a/fs/afs/internal.h
+++ b/fs/afs/internal.h
@@ -863,7 +863,7 @@ struct afs_vnode_cache_aux {
* splitting the field into two parts. However, we need to represent a range
* 0...PAGE_SIZE inclusive, so we can't support 64K pages on a 32-bit system.
*/
-#if PAGE_SIZE > 32768
+#ifdef CONFIG_64BIT
#define __AFS_PAGE_PRIV_MASK 0xffffffffUL
#define __AFS_PAGE_PRIV_SHIFT 32
#else
@@ -878,12 +878,12 @@ static inline size_t afs_page_dirty_from(unsigned long priv)
static inline size_t afs_page_dirty_to(unsigned long priv)
{
- return (priv >> __AFS_PAGE_PRIV_SHIFT) & __AFS_PAGE_PRIV_MASK;
+ return ((priv >> __AFS_PAGE_PRIV_SHIFT) & __AFS_PAGE_PRIV_MASK) + 1;
}
static inline unsigned long afs_page_dirty(size_t from, size_t to)
{
- return ((unsigned long)to << __AFS_PAGE_PRIV_SHIFT) | from;
+ return ((unsigned long)(to - 1) << __AFS_PAGE_PRIV_SHIFT) | from;
}
#include <trace/events/afs.h>
diff --git a/fs/afs/write.c b/fs/afs/write.c
index ea1768b3c0b5..1a49f5c89342 100644
--- a/fs/afs/write.c
+++ b/fs/afs/write.c
@@ -93,7 +93,7 @@ int afs_write_begin(struct file *file, struct address_space *mapping,
/* We want to store information about how much of a page is altered in
* page->private.
*/
- BUILD_BUG_ON(PAGE_SIZE > 32768 && sizeof(page->private) < 8);
+ BUILD_BUG_ON(PAGE_SIZE - 1 > __AFS_PAGE_PRIV_MASK && sizeof(page->private) < 8);
page = grab_cache_page_write_begin(mapping, index, flags);
if (!page)