Commit adcadfa8f373f301e9f622fbf45957adf2d98622
Committed by
Miklos Szeredi
1 parent
698fa1d163
fuse: Getting file for writeback helper
There will be a .writepageS callback implementation which will need to get a fuse_file out of a fuse_inode, thus make a helper for this. Signed-off-by: Maxim Patlasov <MPatlasov@parallels.com> Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Showing 1 changed file with 16 additions and 8 deletions Side-by-side Diff
fs/fuse/file.c
... | ... | @@ -1494,6 +1494,20 @@ |
1494 | 1494 | fuse_writepage_free(fc, req); |
1495 | 1495 | } |
1496 | 1496 | |
1497 | +static struct fuse_file *fuse_write_file(struct fuse_conn *fc, | |
1498 | + struct fuse_inode *fi) | |
1499 | +{ | |
1500 | + struct fuse_file *ff; | |
1501 | + | |
1502 | + spin_lock(&fc->lock); | |
1503 | + BUG_ON(list_empty(&fi->write_files)); | |
1504 | + ff = list_entry(fi->write_files.next, struct fuse_file, write_entry); | |
1505 | + fuse_file_get(ff); | |
1506 | + spin_unlock(&fc->lock); | |
1507 | + | |
1508 | + return ff; | |
1509 | +} | |
1510 | + | |
1497 | 1511 | static int fuse_writepage_locked(struct page *page) |
1498 | 1512 | { |
1499 | 1513 | struct address_space *mapping = page->mapping; |
... | ... | @@ -1501,7 +1515,6 @@ |
1501 | 1515 | struct fuse_conn *fc = get_fuse_conn(inode); |
1502 | 1516 | struct fuse_inode *fi = get_fuse_inode(inode); |
1503 | 1517 | struct fuse_req *req; |
1504 | - struct fuse_file *ff; | |
1505 | 1518 | struct page *tmp_page; |
1506 | 1519 | |
1507 | 1520 | set_page_writeback(page); |
... | ... | @@ -1515,13 +1528,8 @@ |
1515 | 1528 | if (!tmp_page) |
1516 | 1529 | goto err_free; |
1517 | 1530 | |
1518 | - spin_lock(&fc->lock); | |
1519 | - BUG_ON(list_empty(&fi->write_files)); | |
1520 | - ff = list_entry(fi->write_files.next, struct fuse_file, write_entry); | |
1521 | - req->ff = fuse_file_get(ff); | |
1522 | - spin_unlock(&fc->lock); | |
1523 | - | |
1524 | - fuse_write_fill(req, ff, page_offset(page), 0); | |
1531 | + req->ff = fuse_write_file(fc, fi); | |
1532 | + fuse_write_fill(req, req->ff, page_offset(page), 0); | |
1525 | 1533 | |
1526 | 1534 | copy_highpage(tmp_page, page); |
1527 | 1535 | req->misc.write.in.write_flags |= FUSE_WRITE_CACHE; |