16
16
#include "orangefs-kernel.h"
17
17
#include "orangefs-bufmap.h"
18
18
19
- static int orangefs_writepage_locked (struct page * page ,
20
- struct writeback_control * wbc )
19
+ static int orangefs_writepage_locked (struct folio * folio ,
20
+ struct writeback_control * wbc )
21
21
{
22
- struct inode * inode = page -> mapping -> host ;
22
+ struct inode * inode = folio -> mapping -> host ;
23
23
struct orangefs_write_range * wr = NULL ;
24
24
struct iov_iter iter ;
25
25
struct bio_vec bv ;
26
26
size_t wlen ;
27
27
ssize_t ret ;
28
28
loff_t len , off ;
29
29
30
- set_page_writeback ( page );
30
+ folio_start_writeback ( folio );
31
31
32
32
len = i_size_read (inode );
33
- if (PagePrivate ( page ) ) {
34
- wr = ( struct orangefs_write_range * ) page_private ( page ) ;
33
+ if (folio -> private ) {
34
+ wr = folio -> private ;
35
35
WARN_ON (wr -> pos >= len );
36
36
off = wr -> pos ;
37
37
if (off + wr -> len > len )
@@ -40,27 +40,27 @@ static int orangefs_writepage_locked(struct page *page,
40
40
wlen = wr -> len ;
41
41
} else {
42
42
WARN_ON (1 );
43
- off = page_offset (page );
44
- if (off + PAGE_SIZE > len )
43
+ off = folio_pos (folio );
44
+ wlen = folio_size (folio );
45
+
46
+ if (wlen > len - off )
45
47
wlen = len - off ;
46
- else
47
- wlen = PAGE_SIZE ;
48
48
}
49
49
/* Should've been handled in orangefs_invalidate_folio. */
50
50
WARN_ON (off == len || off + wlen > len );
51
51
52
52
WARN_ON (wlen == 0 );
53
- bvec_set_page (& bv , page , wlen , off % PAGE_SIZE );
53
+ bvec_set_folio (& bv , folio , wlen , offset_in_folio ( folio , off ) );
54
54
iov_iter_bvec (& iter , ITER_SOURCE , & bv , 1 , wlen );
55
55
56
56
ret = wait_for_direct_io (ORANGEFS_IO_WRITE , inode , & off , & iter , wlen ,
57
57
len , wr , NULL , NULL );
58
58
if (ret < 0 ) {
59
- mapping_set_error (page -> mapping , ret );
59
+ mapping_set_error (folio -> mapping , ret );
60
60
} else {
61
61
ret = 0 ;
62
62
}
63
- kfree (detach_page_private ( page ));
63
+ kfree (folio_detach_private ( folio ));
64
64
return ret ;
65
65
}
66
66
@@ -179,7 +179,7 @@ static int orangefs_writepages_callback(struct folio *folio,
179
179
orangefs_writepages_work (ow , wbc );
180
180
ow -> npages = 0 ;
181
181
}
182
- ret = orangefs_writepage_locked (& folio -> page , wbc );
182
+ ret = orangefs_writepage_locked (folio , wbc );
183
183
mapping_set_error (folio -> mapping , ret );
184
184
folio_unlock (folio );
185
185
folio_end_writeback (folio );
@@ -474,7 +474,7 @@ static int orangefs_launder_folio(struct folio *folio)
474
474
};
475
475
folio_wait_writeback (folio );
476
476
if (folio_clear_dirty_for_io (folio )) {
477
- r = orangefs_writepage_locked (& folio -> page , & wbc );
477
+ r = orangefs_writepage_locked (folio , & wbc );
478
478
folio_end_writeback (folio );
479
479
}
480
480
return r ;
0 commit comments