@@ -850,11 +850,11 @@ static int fuse_readpages_fill(void *_data, struct page *page)
850
850
fuse_wait_on_page_writeback (inode , page -> index );
851
851
852
852
if (req -> num_pages &&
853
- (req -> num_pages == FUSE_MAX_PAGES_PER_REQ ||
853
+ (req -> num_pages == fc -> max_pages ||
854
854
(req -> num_pages + 1 ) * PAGE_SIZE > fc -> max_read ||
855
855
req -> pages [req -> num_pages - 1 ]-> index + 1 != page -> index )) {
856
- int nr_alloc = min_t (unsigned , data -> nr_pages ,
857
- FUSE_MAX_PAGES_PER_REQ );
856
+ unsigned int nr_alloc = min_t (unsigned int , data -> nr_pages ,
857
+ fc -> max_pages );
858
858
fuse_send_readpages (req , data -> file );
859
859
if (fc -> async_read )
860
860
req = fuse_get_req_for_background (fc , nr_alloc );
@@ -889,7 +889,7 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
889
889
struct fuse_conn * fc = get_fuse_conn (inode );
890
890
struct fuse_fill_data data ;
891
891
int err ;
892
- int nr_alloc = min_t (unsigned , nr_pages , FUSE_MAX_PAGES_PER_REQ );
892
+ unsigned int nr_alloc = min_t (unsigned int , nr_pages , fc -> max_pages );
893
893
894
894
err = - EIO ;
895
895
if (is_bad_inode (inode ))
@@ -1104,12 +1104,13 @@ static ssize_t fuse_fill_write_pages(struct fuse_req *req,
1104
1104
return count > 0 ? count : err ;
1105
1105
}
1106
1106
1107
- static inline unsigned fuse_wr_pages (loff_t pos , size_t len )
1107
+ static inline unsigned int fuse_wr_pages (loff_t pos , size_t len ,
1108
+ unsigned int max_pages )
1108
1109
{
1109
- return min_t (unsigned ,
1110
+ return min_t (unsigned int ,
1110
1111
((pos + len - 1 ) >> PAGE_SHIFT ) -
1111
1112
(pos >> PAGE_SHIFT ) + 1 ,
1112
- FUSE_MAX_PAGES_PER_REQ );
1113
+ max_pages );
1113
1114
}
1114
1115
1115
1116
static ssize_t fuse_perform_write (struct kiocb * iocb ,
@@ -1131,7 +1132,8 @@ static ssize_t fuse_perform_write(struct kiocb *iocb,
1131
1132
do {
1132
1133
struct fuse_req * req ;
1133
1134
ssize_t count ;
1134
- unsigned nr_pages = fuse_wr_pages (pos , iov_iter_count (ii ));
1135
+ unsigned int nr_pages = fuse_wr_pages (pos , iov_iter_count (ii ),
1136
+ fc -> max_pages );
1135
1137
1136
1138
req = fuse_get_req (fc , nr_pages );
1137
1139
if (IS_ERR (req )) {
@@ -1321,11 +1323,6 @@ static int fuse_get_user_pages(struct fuse_req *req, struct iov_iter *ii,
1321
1323
return ret < 0 ? ret : 0 ;
1322
1324
}
1323
1325
1324
- static inline int fuse_iter_npages (const struct iov_iter * ii_p )
1325
- {
1326
- return iov_iter_npages (ii_p , FUSE_MAX_PAGES_PER_REQ );
1327
- }
1328
-
1329
1326
ssize_t fuse_direct_io (struct fuse_io_priv * io , struct iov_iter * iter ,
1330
1327
loff_t * ppos , int flags )
1331
1328
{
@@ -1345,9 +1342,10 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
1345
1342
int err = 0 ;
1346
1343
1347
1344
if (io -> async )
1348
- req = fuse_get_req_for_background (fc , fuse_iter_npages (iter ));
1345
+ req = fuse_get_req_for_background (fc , iov_iter_npages (iter ,
1346
+ fc -> max_pages ));
1349
1347
else
1350
- req = fuse_get_req (fc , fuse_iter_npages (iter ));
1348
+ req = fuse_get_req (fc , iov_iter_npages (iter , fc -> max_pages ));
1351
1349
if (IS_ERR (req ))
1352
1350
return PTR_ERR (req );
1353
1351
@@ -1392,9 +1390,10 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
1392
1390
fuse_put_request (fc , req );
1393
1391
if (io -> async )
1394
1392
req = fuse_get_req_for_background (fc ,
1395
- fuse_iter_npages (iter ));
1393
+ iov_iter_npages (iter , fc -> max_pages ));
1396
1394
else
1397
- req = fuse_get_req (fc , fuse_iter_npages (iter ));
1395
+ req = fuse_get_req (fc , iov_iter_npages (iter ,
1396
+ fc -> max_pages ));
1398
1397
if (IS_ERR (req ))
1399
1398
break ;
1400
1399
}
@@ -1823,7 +1822,7 @@ static int fuse_writepages_fill(struct page *page,
1823
1822
is_writeback = fuse_page_is_writeback (inode , page -> index );
1824
1823
1825
1824
if (req && req -> num_pages &&
1826
- (is_writeback || req -> num_pages == FUSE_MAX_PAGES_PER_REQ ||
1825
+ (is_writeback || req -> num_pages == fc -> max_pages ||
1827
1826
(req -> num_pages + 1 ) * PAGE_SIZE > fc -> max_write ||
1828
1827
data -> orig_pages [req -> num_pages - 1 ]-> index + 1 != page -> index )) {
1829
1828
fuse_writepages_send (data );
@@ -1851,7 +1850,7 @@ static int fuse_writepages_fill(struct page *page,
1851
1850
struct fuse_inode * fi = get_fuse_inode (inode );
1852
1851
1853
1852
err = - ENOMEM ;
1854
- req = fuse_request_alloc_nofs (FUSE_MAX_PAGES_PER_REQ );
1853
+ req = fuse_request_alloc_nofs (fc -> max_pages );
1855
1854
if (!req ) {
1856
1855
__free_page (tmp_page );
1857
1856
goto out_unlock ;
@@ -1908,6 +1907,7 @@ static int fuse_writepages(struct address_space *mapping,
1908
1907
struct writeback_control * wbc )
1909
1908
{
1910
1909
struct inode * inode = mapping -> host ;
1910
+ struct fuse_conn * fc = get_fuse_conn (inode );
1911
1911
struct fuse_fill_wb_data data ;
1912
1912
int err ;
1913
1913
@@ -1920,7 +1920,7 @@ static int fuse_writepages(struct address_space *mapping,
1920
1920
data .ff = NULL ;
1921
1921
1922
1922
err = - ENOMEM ;
1923
- data .orig_pages = kcalloc (FUSE_MAX_PAGES_PER_REQ ,
1923
+ data .orig_pages = kcalloc (fc -> max_pages ,
1924
1924
sizeof (struct page * ),
1925
1925
GFP_NOFS );
1926
1926
if (!data .orig_pages )
@@ -2391,10 +2391,11 @@ static int fuse_copy_ioctl_iovec_old(struct iovec *dst, void *src,
2391
2391
}
2392
2392
2393
2393
/* Make sure iov_length() won't overflow */
2394
- static int fuse_verify_ioctl_iov (struct iovec * iov , size_t count )
2394
+ static int fuse_verify_ioctl_iov (struct fuse_conn * fc , struct iovec * iov ,
2395
+ size_t count )
2395
2396
{
2396
2397
size_t n ;
2397
- u32 max = FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT ;
2398
+ u32 max = fc -> max_pages << PAGE_SHIFT ;
2398
2399
2399
2400
for (n = 0 ; n < count ; n ++ , iov ++ ) {
2400
2401
if (iov -> iov_len > (size_t ) max )
@@ -2518,7 +2519,7 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
2518
2519
BUILD_BUG_ON (sizeof (struct fuse_ioctl_iovec ) * FUSE_IOCTL_MAX_IOV > PAGE_SIZE );
2519
2520
2520
2521
err = - ENOMEM ;
2521
- pages = kcalloc (FUSE_MAX_PAGES_PER_REQ , sizeof (pages [0 ]), GFP_KERNEL );
2522
+ pages = kcalloc (fc -> max_pages , sizeof (pages [0 ]), GFP_KERNEL );
2522
2523
iov_page = (struct iovec * ) __get_free_page (GFP_KERNEL );
2523
2524
if (!pages || !iov_page )
2524
2525
goto out ;
@@ -2557,7 +2558,7 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
2557
2558
2558
2559
/* make sure there are enough buffer pages and init request with them */
2559
2560
err = - ENOMEM ;
2560
- if (max_pages > FUSE_MAX_PAGES_PER_REQ )
2561
+ if (max_pages > fc -> max_pages )
2561
2562
goto out ;
2562
2563
while (num_pages < max_pages ) {
2563
2564
pages [num_pages ] = alloc_page (GFP_KERNEL | __GFP_HIGHMEM );
@@ -2644,11 +2645,11 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
2644
2645
in_iov = iov_page ;
2645
2646
out_iov = in_iov + in_iovs ;
2646
2647
2647
- err = fuse_verify_ioctl_iov (in_iov , in_iovs );
2648
+ err = fuse_verify_ioctl_iov (fc , in_iov , in_iovs );
2648
2649
if (err )
2649
2650
goto out ;
2650
2651
2651
- err = fuse_verify_ioctl_iov (out_iov , out_iovs );
2652
+ err = fuse_verify_ioctl_iov (fc , out_iov , out_iovs );
2652
2653
if (err )
2653
2654
goto out ;
2654
2655
@@ -2839,9 +2840,9 @@ static void fuse_do_truncate(struct file *file)
2839
2840
fuse_do_setattr (file_dentry (file ), & attr , file );
2840
2841
}
2841
2842
2842
- static inline loff_t fuse_round_up (loff_t off )
2843
+ static inline loff_t fuse_round_up (struct fuse_conn * fc , loff_t off )
2843
2844
{
2844
- return round_up (off , FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT );
2845
+ return round_up (off , fc -> max_pages << PAGE_SHIFT );
2845
2846
}
2846
2847
2847
2848
static ssize_t
@@ -2870,7 +2871,7 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
2870
2871
if (async_dio && iov_iter_rw (iter ) != WRITE && offset + count > i_size ) {
2871
2872
if (offset >= i_size )
2872
2873
return 0 ;
2873
- iov_iter_truncate (iter , fuse_round_up (i_size - offset ));
2874
+ iov_iter_truncate (iter , fuse_round_up (ff -> fc , i_size - offset ));
2874
2875
count = iov_iter_count (iter );
2875
2876
}
2876
2877
0 commit comments