@@ -87,25 +87,23 @@ static inline struct metapage *page_to_mp(struct page *page, int offset)
87
87
return mp_anchor (page )-> mp [offset >> L2PSIZE ];
88
88
}
89
89
90
- static inline int insert_metapage (struct page * page , struct metapage * mp )
90
+ static inline int insert_metapage (struct folio * folio , struct metapage * mp )
91
91
{
92
92
struct meta_anchor * a ;
93
93
int index ;
94
94
int l2mp_blocks ; /* log2 blocks per metapage */
95
95
96
- if (PagePrivate (page ))
97
- a = mp_anchor (page );
98
- else {
96
+ a = folio -> private ;
97
+ if (!a ) {
99
98
a = kzalloc (sizeof (struct meta_anchor ), GFP_NOFS );
100
99
if (!a )
101
100
return - ENOMEM ;
102
- set_page_private (page , (unsigned long )a );
103
- SetPagePrivate (page );
104
- kmap (page );
101
+ folio_attach_private (folio , a );
102
+ kmap (& folio -> page );
105
103
}
106
104
107
105
if (mp ) {
108
- l2mp_blocks = L2PSIZE - page -> mapping -> host -> i_blkbits ;
106
+ l2mp_blocks = L2PSIZE - folio -> mapping -> host -> i_blkbits ;
109
107
index = (mp -> index >> l2mp_blocks ) & (MPS_PER_PAGE - 1 );
110
108
a -> mp_count ++ ;
111
109
a -> mp [index ] = mp ;
@@ -127,8 +125,7 @@ static inline void remove_metapage(struct page *page, struct metapage *mp)
127
125
a -> mp [index ] = NULL ;
128
126
if (-- a -> mp_count == 0 ) {
129
127
kfree (a );
130
- set_page_private (page , 0 );
131
- ClearPagePrivate (page );
128
+ detach_page_private (page );
132
129
kunmap (page );
133
130
}
134
131
}
@@ -150,20 +147,18 @@ static inline struct metapage *page_to_mp(struct page *page, int offset)
150
147
return PagePrivate (page ) ? (struct metapage * )page_private (page ) : NULL ;
151
148
}
152
149
153
- static inline int insert_metapage (struct page * page , struct metapage * mp )
150
+ static inline int insert_metapage (struct folio * folio , struct metapage * mp )
154
151
{
155
152
if (mp ) {
156
- set_page_private (page , (unsigned long )mp );
157
- SetPagePrivate (page );
158
- kmap (page );
153
+ folio_attach_private (folio , mp );
154
+ kmap (& folio -> page );
159
155
}
160
156
return 0 ;
161
157
}
162
158
163
159
static inline void remove_metapage (struct page * page , struct metapage * mp )
164
160
{
165
- set_page_private (page , 0 );
166
- ClearPagePrivate (page );
161
+ detach_page_private (page );
167
162
kunmap (page );
168
163
}
169
164
@@ -496,7 +491,7 @@ static int metapage_read_folio(struct file *fp, struct folio *folio)
496
491
& xlen );
497
492
if (pblock ) {
498
493
if (!folio -> private )
499
- insert_metapage (& folio -> page , NULL );
494
+ insert_metapage (folio , NULL );
500
495
inc_io (& folio -> page );
501
496
if (bio )
502
497
submit_bio (bio );
@@ -658,7 +653,7 @@ struct metapage *__get_metapage(struct inode *inode, unsigned long lblock,
658
653
mp -> logical_size = size ;
659
654
mp -> data = folio_address (folio ) + page_offset ;
660
655
mp -> index = lblock ;
661
- if (unlikely (insert_metapage (& folio -> page , mp ))) {
656
+ if (unlikely (insert_metapage (folio , mp ))) {
662
657
free_metapage (mp );
663
658
goto unlock ;
664
659
}
0 commit comments