@@ -1728,7 +1728,7 @@ static void fuse_retrieve_end(struct fuse_mount *fm, struct fuse_args *args,
1728
1728
struct fuse_retrieve_args * ra =
1729
1729
container_of (args , typeof (* ra ), ap .args );
1730
1730
1731
- release_pages (ra -> ap .pages , ra -> ap .num_pages );
1731
+ release_pages (ra -> ap .folios , ra -> ap .num_folios );
1732
1732
kfree (ra );
1733
1733
}
1734
1734
@@ -1742,7 +1742,7 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
1742
1742
unsigned int num ;
1743
1743
unsigned int offset ;
1744
1744
size_t total_len = 0 ;
1745
- unsigned int num_pages ;
1745
+ unsigned int num_pages , cur_pages = 0 ;
1746
1746
struct fuse_conn * fc = fm -> fc ;
1747
1747
struct fuse_retrieve_args * ra ;
1748
1748
size_t args_size = sizeof (* ra );
@@ -1761,15 +1761,16 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
1761
1761
num_pages = (num + offset + PAGE_SIZE - 1 ) >> PAGE_SHIFT ;
1762
1762
num_pages = min (num_pages , fc -> max_pages );
1763
1763
1764
- args_size += num_pages * (sizeof (ap -> pages [0 ]) + sizeof (ap -> descs [0 ]));
1764
+ args_size += num_pages * (sizeof (ap -> folios [0 ]) + sizeof (ap -> folio_descs [0 ]));
1765
1765
1766
1766
ra = kzalloc (args_size , GFP_KERNEL );
1767
1767
if (!ra )
1768
1768
return - ENOMEM ;
1769
1769
1770
1770
ap = & ra -> ap ;
1771
- ap -> pages = (void * ) (ra + 1 );
1772
- ap -> descs = (void * ) (ap -> pages + num_pages );
1771
+ ap -> folios = (void * ) (ra + 1 );
1772
+ ap -> folio_descs = (void * ) (ap -> folios + num_pages );
1773
+ ap -> uses_folios = true;
1773
1774
1774
1775
args = & ap -> args ;
1775
1776
args -> nodeid = outarg -> nodeid ;
@@ -1780,7 +1781,7 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
1780
1781
1781
1782
index = outarg -> offset >> PAGE_SHIFT ;
1782
1783
1783
- while (num && ap -> num_pages < num_pages ) {
1784
+ while (num && cur_pages < num_pages ) {
1784
1785
struct folio * folio ;
1785
1786
unsigned int this_num ;
1786
1787
@@ -1789,10 +1790,11 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
1789
1790
break ;
1790
1791
1791
1792
this_num = min_t (unsigned , num , PAGE_SIZE - offset );
1792
- ap -> pages [ap -> num_pages ] = & folio -> page ;
1793
- ap -> descs [ap -> num_pages ].offset = offset ;
1794
- ap -> descs [ap -> num_pages ].length = this_num ;
1795
- ap -> num_pages ++ ;
1793
+ ap -> folios [ap -> num_folios ] = folio ;
1794
+ ap -> folio_descs [ap -> num_folios ].offset = offset ;
1795
+ ap -> folio_descs [ap -> num_folios ].length = this_num ;
1796
+ ap -> num_folios ++ ;
1797
+ cur_pages ++ ;
1796
1798
1797
1799
offset = 0 ;
1798
1800
num -= this_num ;
0 commit comments