Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
8b23ea7b
L
linux
项目概览
Linux-御风守护者
/
linux
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8b23ea7b
编写于
6月 09, 2006
作者:
T
Trond Myklebust
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
RPC: Allow struc xdr_stream to read the page section of an xdr_buf
Signed-off-by:
N
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
上级
51d8fa6a
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
27 addition
and
2 deletion
+27
-2
include/linux/sunrpc/xdr.h
include/linux/sunrpc/xdr.h
+1
-0
net/sunrpc/xdr.c
net/sunrpc/xdr.c
+26
-2
未找到文件。
include/linux/sunrpc/xdr.h
浏览文件 @
8b23ea7b
...
...
@@ -194,6 +194,7 @@ extern void xdr_write_pages(struct xdr_stream *xdr, struct page **pages,
extern
void
xdr_init_decode
(
struct
xdr_stream
*
xdr
,
struct
xdr_buf
*
buf
,
uint32_t
*
p
);
extern
uint32_t
*
xdr_inline_decode
(
struct
xdr_stream
*
xdr
,
size_t
nbytes
);
extern
void
xdr_read_pages
(
struct
xdr_stream
*
xdr
,
unsigned
int
len
);
extern
void
xdr_enter_page
(
struct
xdr_stream
*
xdr
,
unsigned
int
len
);
#endif
/* __KERNEL__ */
...
...
net/sunrpc/xdr.c
浏览文件 @
8b23ea7b
...
...
@@ -568,8 +568,7 @@ EXPORT_SYMBOL(xdr_inline_decode);
*
* Moves data beyond the current pointer position from the XDR head[] buffer
* into the page list. Any data that lies beyond current position + "len"
* bytes is moved into the XDR tail[]. The current pointer is then
* repositioned at the beginning of the XDR tail.
* bytes is moved into the XDR tail[].
*/
void
xdr_read_pages
(
struct
xdr_stream
*
xdr
,
unsigned
int
len
)
{
...
...
@@ -606,6 +605,31 @@ void xdr_read_pages(struct xdr_stream *xdr, unsigned int len)
}
EXPORT_SYMBOL
(
xdr_read_pages
);
/**
* xdr_enter_page - decode data from the XDR page
* @xdr: pointer to xdr_stream struct
* @len: number of bytes of page data
*
* Moves data beyond the current pointer position from the XDR head[] buffer
* into the page list. Any data that lies beyond current position + "len"
* bytes is moved into the XDR tail[]. The current pointer is then
* repositioned at the beginning of the first XDR page.
*/
void
xdr_enter_page
(
struct
xdr_stream
*
xdr
,
unsigned
int
len
)
{
char
*
kaddr
=
page_address
(
xdr
->
buf
->
pages
[
0
]);
xdr_read_pages
(
xdr
,
len
);
/*
* Position current pointer at beginning of tail, and
* set remaining message length.
*/
if
(
len
>
PAGE_CACHE_SIZE
-
xdr
->
buf
->
page_base
)
len
=
PAGE_CACHE_SIZE
-
xdr
->
buf
->
page_base
;
xdr
->
p
=
(
uint32_t
*
)(
kaddr
+
xdr
->
buf
->
page_base
);
xdr
->
end
=
(
uint32_t
*
)((
char
*
)
xdr
->
p
+
len
);
}
EXPORT_SYMBOL
(
xdr_enter_page
);
static
struct
kvec
empty_iov
=
{.
iov_base
=
NULL
,
.
iov_len
=
0
};
void
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录