File tree Expand file tree Collapse file tree 1 file changed +12
-6
lines changed Expand file tree Collapse file tree 1 file changed +12
-6
lines changed Original file line number Diff line number Diff line change @@ -2288,6 +2288,13 @@ static int fuse_writepages_fill(struct folio *folio,
2288
2288
struct folio * tmp_folio ;
2289
2289
int err ;
2290
2290
2291
+ if (!data -> ff ) {
2292
+ err = - EIO ;
2293
+ data -> ff = fuse_write_file_get (fi );
2294
+ if (!data -> ff )
2295
+ goto out_unlock ;
2296
+ }
2297
+
2291
2298
if (wpa && fuse_writepage_need_send (fc , & folio -> page , ap , data )) {
2292
2299
fuse_writepages_send (data );
2293
2300
data -> wpa = NULL ;
@@ -2351,23 +2358,21 @@ static int fuse_writepages(struct address_space *mapping,
2351
2358
struct writeback_control * wbc )
2352
2359
{
2353
2360
struct inode * inode = mapping -> host ;
2354
- struct fuse_inode * fi = get_fuse_inode (inode );
2355
2361
struct fuse_conn * fc = get_fuse_conn (inode );
2356
2362
struct fuse_fill_wb_data data ;
2357
2363
int err ;
2358
2364
2365
+ err = - EIO ;
2359
2366
if (fuse_is_bad (inode ))
2360
- return - EIO ;
2367
+ goto out ;
2361
2368
2362
2369
if (wbc -> sync_mode == WB_SYNC_NONE &&
2363
2370
fc -> num_background >= fc -> congestion_threshold )
2364
2371
return 0 ;
2365
2372
2366
2373
data .inode = inode ;
2367
2374
data .wpa = NULL ;
2368
- data .ff = fuse_write_file_get (fi );
2369
- if (!data .ff )
2370
- return - EIO ;
2375
+ data .ff = NULL ;
2371
2376
2372
2377
err = - ENOMEM ;
2373
2378
data .orig_pages = kcalloc (fc -> max_pages ,
@@ -2381,10 +2386,11 @@ static int fuse_writepages(struct address_space *mapping,
2381
2386
WARN_ON (!data .wpa -> ia .ap .num_pages );
2382
2387
fuse_writepages_send (& data );
2383
2388
}
2389
+ if (data .ff )
2390
+ fuse_file_put (data .ff , false);
2384
2391
2385
2392
kfree (data .orig_pages );
2386
2393
out :
2387
- fuse_file_put (data .ff , false);
2388
2394
return err ;
2389
2395
}
2390
2396
You can’t perform that action at this time.
0 commit comments