Skip to content

Commit c9ebd3d

Browse files
author
Jaegeuk Kim
committed
f2fs: initialize page->private when using for our internal use
We need to guarantee it's initially zero. Otherwise, it'll hurt entire flag operations. Fixes: b763f3b ("f2fs: restructure f2fs page.private layout") Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
1 parent 151b198 commit c9ebd3d

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

fs/f2fs/data.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3819,6 +3819,8 @@ int f2fs_migrate_page(struct address_space *mapping,
38193819
get_page(newpage);
38203820
}
38213821

3822+
/* guarantee to start from no stale private field */
3823+
set_page_private(newpage, 0);
38223824
if (PagePrivate(page)) {
38233825
set_page_private(newpage, page_private(page));
38243826
SetPagePrivate(newpage);

fs/f2fs/f2fs.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1331,7 +1331,8 @@ enum {
13311331
#define PAGE_PRIVATE_GET_FUNC(name, flagname) \
13321332
static inline bool page_private_##name(struct page *page) \
13331333
{ \
1334-
return test_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)) && \
1334+
return PagePrivate(page) && \
1335+
test_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)) && \
13351336
test_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \
13361337
}
13371338

@@ -1341,6 +1342,7 @@ static inline void set_page_private_##name(struct page *page) \
13411342
if (!PagePrivate(page)) { \
13421343
get_page(page); \
13431344
SetPagePrivate(page); \
1345+
set_page_private(page, 0); \
13441346
} \
13451347
set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)); \
13461348
set_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \
@@ -1392,6 +1394,7 @@ static inline void set_page_private_data(struct page *page, unsigned long data)
13921394
if (!PagePrivate(page)) {
13931395
get_page(page);
13941396
SetPagePrivate(page);
1397+
set_page_private(page, 0);
13951398
}
13961399
set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page));
13971400
page_private(page) |= data << PAGE_PRIVATE_MAX;

0 commit comments

Comments
 (0)