9p: Reorganization of 9p file system code
This patchset moves non-filesystem interfaces of v9fs from fs/9p to net/9p. It moves the transport, packet marshalling and connection layers to net/9p leaving only the VFS related files in fs/9p. This work is being done in preparation for in-kernel 9p servers as well as alternate 9p clients (other than VFS). Signed-off-by: Latchesar Ionkov <lucho@ionkov.net> Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
This commit is contained in:
committed by
Eric Van Hensbergen
parent
8d9107e8c5
commit
bd238fb431
@@ -33,10 +33,10 @@
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/idr.h>
|
||||
#include <linux/sched.h>
|
||||
#include <net/9p/9p.h>
|
||||
#include <net/9p/client.h>
|
||||
|
||||
#include "debug.h"
|
||||
#include "v9fs.h"
|
||||
#include "9p.h"
|
||||
#include "v9fs_vfs.h"
|
||||
#include "fid.h"
|
||||
|
||||
@@ -50,55 +50,26 @@
|
||||
|
||||
static int v9fs_vfs_readpage(struct file *filp, struct page *page)
|
||||
{
|
||||
char *buffer = NULL;
|
||||
int retval = -EIO;
|
||||
loff_t offset = page_offset(page);
|
||||
int count = PAGE_CACHE_SIZE;
|
||||
struct inode *inode = filp->f_path.dentry->d_inode;
|
||||
struct v9fs_session_info *v9ses = v9fs_inode2v9ses(inode);
|
||||
int rsize = v9ses->maxdata - V9FS_IOHDRSZ;
|
||||
struct v9fs_fid *v9f = filp->private_data;
|
||||
struct v9fs_fcall *fcall = NULL;
|
||||
int fid = v9f->fid;
|
||||
int total = 0;
|
||||
int result = 0;
|
||||
|
||||
dprintk(DEBUG_VFS, "\n");
|
||||
int retval;
|
||||
loff_t offset;
|
||||
char *buffer;
|
||||
struct p9_fid *fid;
|
||||
|
||||
P9_DPRINTK(P9_DEBUG_VFS, "\n");
|
||||
fid = filp->private_data;
|
||||
buffer = kmap(page);
|
||||
do {
|
||||
if (count < rsize)
|
||||
rsize = count;
|
||||
offset = page_offset(page);
|
||||
|
||||
result = v9fs_t_read(v9ses, fid, offset, rsize, &fcall);
|
||||
retval = p9_client_readn(fid, buffer, offset, PAGE_CACHE_SIZE);
|
||||
if (retval < 0)
|
||||
goto done;
|
||||
|
||||
if (result < 0) {
|
||||
printk(KERN_ERR "v9fs_t_read returned %d\n",
|
||||
result);
|
||||
|
||||
kfree(fcall);
|
||||
goto UnmapAndUnlock;
|
||||
} else
|
||||
offset += result;
|
||||
|
||||
memcpy(buffer, fcall->params.rread.data, result);
|
||||
|
||||
count -= result;
|
||||
buffer += result;
|
||||
total += result;
|
||||
|
||||
kfree(fcall);
|
||||
|
||||
if (result < rsize)
|
||||
break;
|
||||
} while (count);
|
||||
|
||||
memset(buffer, 0, count);
|
||||
memset(buffer + retval, 0, PAGE_CACHE_SIZE - retval);
|
||||
flush_dcache_page(page);
|
||||
SetPageUptodate(page);
|
||||
retval = 0;
|
||||
|
||||
UnmapAndUnlock:
|
||||
done:
|
||||
kunmap(page);
|
||||
unlock_page(page);
|
||||
return retval;
|
||||
|
Reference in New Issue
Block a user