[AF_RXRPC]: Make the in-kernel AFS filesystem use AF_RXRPC.
Make the in-kernel AFS filesystem use AF_RXRPC instead of the old RxRPC code. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
此提交包含在:
@@ -1,6 +1,6 @@
|
||||
/* file.c: AFS filesystem file handling
|
||||
/* AFS filesystem file handling
|
||||
*
|
||||
* Copyright (C) 2002 Red Hat, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved.
|
||||
* Written by David Howells (dhowells@redhat.com)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -15,9 +15,6 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include "volume.h"
|
||||
#include "vnode.h"
|
||||
#include <rxrpc/call.h>
|
||||
#include "internal.h"
|
||||
|
||||
#if 0
|
||||
@@ -80,12 +77,10 @@ static void afs_file_readpage_write_complete(void *cookie_data,
|
||||
*/
|
||||
static int afs_file_readpage(struct file *file, struct page *page)
|
||||
{
|
||||
struct afs_rxfs_fetch_descriptor desc;
|
||||
#ifdef AFS_CACHING_SUPPORT
|
||||
struct cachefs_page *pageio;
|
||||
#endif
|
||||
struct afs_vnode *vnode;
|
||||
struct inode *inode;
|
||||
size_t len;
|
||||
off_t offset;
|
||||
int ret;
|
||||
|
||||
inode = page->mapping->host;
|
||||
@@ -97,14 +92,10 @@ static int afs_file_readpage(struct file *file, struct page *page)
|
||||
BUG_ON(!PageLocked(page));
|
||||
|
||||
ret = -ESTALE;
|
||||
if (vnode->flags & AFS_VNODE_DELETED)
|
||||
if (test_bit(AFS_VNODE_DELETED, &vnode->flags))
|
||||
goto error;
|
||||
|
||||
#ifdef AFS_CACHING_SUPPORT
|
||||
ret = cachefs_page_get_private(page, &pageio, GFP_NOIO);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
/* is it cached? */
|
||||
ret = cachefs_read_or_alloc_page(vnode->cache,
|
||||
page,
|
||||
@@ -128,26 +119,19 @@ static int afs_file_readpage(struct file *file, struct page *page)
|
||||
case -ENOBUFS:
|
||||
case -ENODATA:
|
||||
default:
|
||||
desc.fid = vnode->fid;
|
||||
desc.offset = page->index << PAGE_CACHE_SHIFT;
|
||||
desc.size = min((size_t) (inode->i_size - desc.offset),
|
||||
(size_t) PAGE_SIZE);
|
||||
desc.buffer = kmap(page);
|
||||
|
||||
clear_page(desc.buffer);
|
||||
offset = page->index << PAGE_CACHE_SHIFT;
|
||||
len = min_t(size_t, i_size_read(inode) - offset, PAGE_SIZE);
|
||||
|
||||
/* read the contents of the file from the server into the
|
||||
* page */
|
||||
ret = afs_vnode_fetch_data(vnode, &desc);
|
||||
kunmap(page);
|
||||
ret = afs_vnode_fetch_data(vnode, offset, len, page);
|
||||
if (ret < 0) {
|
||||
if (ret==-ENOENT) {
|
||||
if (ret == -ENOENT) {
|
||||
_debug("got NOENT from server"
|
||||
" - marking file deleted and stale");
|
||||
vnode->flags |= AFS_VNODE_DELETED;
|
||||
set_bit(AFS_VNODE_DELETED, &vnode->flags);
|
||||
ret = -ESTALE;
|
||||
}
|
||||
|
||||
#ifdef AFS_CACHING_SUPPORT
|
||||
cachefs_uncache_page(vnode->cache, page);
|
||||
#endif
|
||||
@@ -174,10 +158,9 @@ static int afs_file_readpage(struct file *file, struct page *page)
|
||||
_leave(" = 0");
|
||||
return 0;
|
||||
|
||||
error:
|
||||
error:
|
||||
SetPageError(page);
|
||||
unlock_page(page);
|
||||
|
||||
_leave(" = %d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
新增問題並參考
封鎖使用者