aboutsummaryrefslogtreecommitdiffstats
path: root/fs/fuse/file.c
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2013-06-29 13:42:20 -0400
committerMiklos Szeredi <mszeredi@suse.cz>2013-10-01 10:44:50 -0400
commitadcadfa8f373f301e9f622fbf45957adf2d98622 (patch)
tree16e9e14e4dfe3aeafb6e1d1f055c20b518deb35f /fs/fuse/file.c
parent698fa1d163c560343b8012a0a916440d076b6c8a (diff)
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>
Diffstat (limited to 'fs/fuse/file.c')
-rw-r--r--fs/fuse/file.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 4598345ab87d..aab6d05355e4 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -1494,6 +1494,20 @@ static void fuse_writepage_end(struct fuse_conn *fc, struct fuse_req *req)
1494 fuse_writepage_free(fc, req); 1494 fuse_writepage_free(fc, req);
1495} 1495}
1496 1496
1497static 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
1497static int fuse_writepage_locked(struct page *page) 1511static int fuse_writepage_locked(struct page *page)
1498{ 1512{
1499 struct address_space *mapping = page->mapping; 1513 struct address_space *mapping = page->mapping;
@@ -1501,7 +1515,6 @@ static int fuse_writepage_locked(struct page *page)
1501 struct fuse_conn *fc = get_fuse_conn(inode); 1515 struct fuse_conn *fc = get_fuse_conn(inode);
1502 struct fuse_inode *fi = get_fuse_inode(inode); 1516 struct fuse_inode *fi = get_fuse_inode(inode);
1503 struct fuse_req *req; 1517 struct fuse_req *req;
1504 struct fuse_file *ff;
1505 struct page *tmp_page; 1518 struct page *tmp_page;
1506 1519
1507 set_page_writeback(page); 1520 set_page_writeback(page);
@@ -1515,13 +1528,8 @@ static int fuse_writepage_locked(struct page *page)
1515 if (!tmp_page) 1528 if (!tmp_page)
1516 goto err_free; 1529 goto err_free;
1517 1530
1518 spin_lock(&fc->lock); 1531 req->ff = fuse_write_file(fc, fi);
1519 BUG_ON(list_empty(&fi->write_files)); 1532 fuse_write_fill(req, req->ff, page_offset(page), 0);
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);
1525 1533
1526 copy_highpage(tmp_page, page); 1534 copy_highpage(tmp_page, page);
1527 req->misc.write.in.write_flags |= FUSE_WRITE_CACHE; 1535 req->misc.write.in.write_flags |= FUSE_WRITE_CACHE;