Re: struct nfs_fattr alignment problem in nfs3proc.c

Richard Curnow (Richard.Curnow@superh.com)
Mon, 24 Mar 2003 13:49:27 +0000


* Richard Curnow <Richard.Curnow@superh.com> [2003-03-24]:
> + struct unlinkxdr {
> + struct nfs3_diropargs *arg;
> + struct nfs_fattr *res;
> + } *ptr;

Sorry, those asterisks are not good. Instead:

--- ../linux-2.4/fs/nfs/nfs3proc.c Fri Jan 3 15:01:17 2003
+++ fs/nfs/nfs3proc.c Mon Mar 24 13:06:36 2003
@@ -294,25 +294,36 @@
nfs_refresh_inode(dir, &dir_attr);
dprintk("NFS reply remove: %d\n", status);
return status;
}

static int
nfs3_proc_unlink_setup(struct rpc_message *msg, struct dentry *dir, struct qstr *name)
{
struct nfs3_diropargs *arg;
struct nfs_fattr *res;
+ struct unlinkxdr {
+ struct nfs3_diropargs arg;
+ struct nfs_fattr res;
+ } *ptr;

- arg = (struct nfs3_diropargs *)kmalloc(sizeof(*arg)+sizeof(*res), GFP_KERNEL);
- if (!arg)
+ ptr = (struct unlinkxdr *) kmalloc(sizeof(struct unlinkxdr), GFP_KERNEL);
+ if (!ptr)
return -ENOMEM;
- res = (struct nfs_fattr*)(arg + 1);
+ arg = &ptr->arg;
+ res = &ptr->res;
+ if (((unsigned long) arg & 0x7) != 0) {
+ printk("nfs3_proc_unlink_setup : arg not 8-byte aligned!\n");
+ }
+ if (((unsigned long) res & 0x7) != 0) {
+ printk("nfs3_proc_unlink_setup : res not 8-byte aligned!\n");
+ }
arg->fh = NFS_FH(dir->d_inode);
arg->name = name->name;
arg->len = name->len;
res->valid = 0;
msg->rpc_proc = NFS3PROC_REMOVE;
msg->rpc_argp = arg;
msg->rpc_resp = res;
return 0;
}

-- 
Richard \\\ SuperH Core+Debug Architect /// .. At home ..
  P.    /// richard.curnow@superh.com  ///  rc@rc0.org.uk
Curnow  \\\ http://www.superh.com/    ///  www.rc0.org.uk
Speaking for myself, not on behalf of SuperH
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/