2010-05-12 07:43:23

by Zhang Jingwang

[permalink] [raw]
Subject: [PATCH] pnfs: set pnfs_curr_ld before calling initialize_mountpoint

initialize_mountpoint will call _nfs4_pnfs_getdevicelist and then
pnfs_curr_ld->id is accessed. This introduce a NULL pointer reference.

Signed-off-by: Zhang Jingwang <[email protected]>
---
fs/nfs/pnfs.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 3739c38..5ad7fc6 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -212,6 +212,7 @@ set_pnfs_layoutdriver(struct nfs_server *server, const struct nfs_fh *mntfh,
return;

if (id > 0 && find_pnfs(id, &mod)) {
+ server->pnfs_curr_ld = mod->pnfs_ld_type;
if (mod->pnfs_ld_type->ld_io_ops->initialize_mountpoint(
server, mntfh)) {
printk(KERN_ERR "%s: Error initializing mount point "
@@ -222,7 +223,6 @@ set_pnfs_layoutdriver(struct nfs_server *server, const struct nfs_fh *mntfh,
* Layout driver succeeded in initializing mountpoint
* and has taken a reference on the nfs_client cl_devid_cache
*/
- server->pnfs_curr_ld = mod->pnfs_ld_type;
server->nfs_client->rpc_ops = &pnfs_v4_clientops;
dprintk("%s: pNFS module for %u set\n", __func__, id);
return;
--
1.6.2.5



2010-05-13 03:02:00

by Zhang Jingwang

[permalink] [raw]
Subject: Re: [PATCH] pnfs: set pnfs_curr_ld before calling initialize_mountpoint

2010/5/12 William A. (Andy) Adamson <[email protected]>:
> On Wed, May 12, 2010 at 3:42 AM, Zhang Jingwang
> <[email protected]> wrote:
>> initialize_mountpoint will call _nfs4_pnfs_getdevicelist and then
>> pnfs_curr_ld->id is accessed.
>
> Where is pnfs_curr_ld->ld_policy_ops accessed?
In pnfs_set_ds_iosize after set_pnfs_layoutdriver, pnfs_curr_ld is set
in set_pnfs_layoutdriver so it's OK to access
pnfs_curr_ld->ld_policy_ops.

>
> -->Andy
>
>> This introduce a NULL pointer reference.
>>
>> Signed-off-by: Zhang Jingwang <[email protected]>
>> ---
>> ?fs/nfs/pnfs.c | ? ?2 +-
>> ?1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
>> index 3739c38..5ad7fc6 100644
>> --- a/fs/nfs/pnfs.c
>> +++ b/fs/nfs/pnfs.c
>> @@ -212,6 +212,7 @@ set_pnfs_layoutdriver(struct nfs_server *server, const struct nfs_fh *mntfh,
>> ? ? ? ? ? ? ? ?return;
>>
>> ? ? ? ?if (id > 0 && find_pnfs(id, &mod)) {
>> + ? ? ? ? ? ? ? server->pnfs_curr_ld = mod->pnfs_ld_type;
>> ? ? ? ? ? ? ? ?if (mod->pnfs_ld_type->ld_io_ops->initialize_mountpoint(
>> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?server, mntfh)) {
>> ? ? ? ? ? ? ? ? ? ? ? ?printk(KERN_ERR "%s: Error initializing mount point "
>> @@ -222,7 +223,6 @@ set_pnfs_layoutdriver(struct nfs_server *server, const struct nfs_fh *mntfh,
>> ? ? ? ? ? ? ? ? * Layout driver succeeded in initializing mountpoint
>> ? ? ? ? ? ? ? ? * and has taken a reference on the nfs_client cl_devid_cache
>> ? ? ? ? ? ? ? ? */
>> - ? ? ? ? ? ? ? server->pnfs_curr_ld = mod->pnfs_ld_type;
>> ? ? ? ? ? ? ? ?server->nfs_client->rpc_ops = &pnfs_v4_clientops;
>> ? ? ? ? ? ? ? ?dprintk("%s: pNFS module for %u set\n", __func__, id);
>> ? ? ? ? ? ? ? ?return;
>> --
>> 1.6.2.5
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to [email protected]
>> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>



--
Zhang Jingwang
National Research Centre for High Performance Computers
Institute of Computing Technology, Chinese Academy of Sciences
No. 6, South Kexueyuan Road, Haidian District
Beijing, China

2010-05-12 14:12:01

by Andy Adamson

[permalink] [raw]
Subject: Re: [PATCH] pnfs: set pnfs_curr_ld before calling initialize_mountpoint

On Wed, May 12, 2010 at 3:42 AM, Zhang Jingwang
<[email protected]> wrote:
> initialize_mountpoint will call _nfs4_pnfs_getdevicelist and then
> pnfs_curr_ld->id is accessed.

Where is pnfs_curr_ld->ld_policy_ops accessed?

-->Andy

> This introduce a NULL pointer reference.
>
> Signed-off-by: Zhang Jingwang <[email protected]>
> ---
> ?fs/nfs/pnfs.c | ? ?2 +-
> ?1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
> index 3739c38..5ad7fc6 100644
> --- a/fs/nfs/pnfs.c
> +++ b/fs/nfs/pnfs.c
> @@ -212,6 +212,7 @@ set_pnfs_layoutdriver(struct nfs_server *server, const struct nfs_fh *mntfh,
> ? ? ? ? ? ? ? ?return;
>
> ? ? ? ?if (id > 0 && find_pnfs(id, &mod)) {
> + ? ? ? ? ? ? ? server->pnfs_curr_ld = mod->pnfs_ld_type;
> ? ? ? ? ? ? ? ?if (mod->pnfs_ld_type->ld_io_ops->initialize_mountpoint(
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?server, mntfh)) {
> ? ? ? ? ? ? ? ? ? ? ? ?printk(KERN_ERR "%s: Error initializing mount point "
> @@ -222,7 +223,6 @@ set_pnfs_layoutdriver(struct nfs_server *server, const struct nfs_fh *mntfh,
> ? ? ? ? ? ? ? ? * Layout driver succeeded in initializing mountpoint
> ? ? ? ? ? ? ? ? * and has taken a reference on the nfs_client cl_devid_cache
> ? ? ? ? ? ? ? ? */
> - ? ? ? ? ? ? ? server->pnfs_curr_ld = mod->pnfs_ld_type;
> ? ? ? ? ? ? ? ?server->nfs_client->rpc_ops = &pnfs_v4_clientops;
> ? ? ? ? ? ? ? ?dprintk("%s: pNFS module for %u set\n", __func__, id);
> ? ? ? ? ? ? ? ?return;
> --
> 1.6.2.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>