diff options
author | Pavel Emelyanov <xemul@openvz.org> | 2013-06-29 13:42:20 -0400 |
---|---|---|
committer | Miklos Szeredi <mszeredi@suse.cz> | 2013-10-01 10:44:50 -0400 |
commit | adcadfa8f373f301e9f622fbf45957adf2d98622 (patch) | |
tree | 16e9e14e4dfe3aeafb6e1d1f055c20b518deb35f /fs/fuse/file.c | |
parent | 698fa1d163c560343b8012a0a916440d076b6c8a (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.c | 24 |
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 | ||
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 | static int fuse_writepage_locked(struct page *page) | 1511 | static 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; |