- struct nfs_read_data rdata = {
- .flags = (IS_SWAPFILE(inode)? NFS_RPC_SWAPFLAGS : 0),
- .cred = NULL,
- .inode = inode,
- .args = {
- .fh = NFS_FH(inode),
- .lockowner = current->files,
- .pages = &page,
- .pgbase = 0UL,
- .count = rsize,
- },
- .res = {
- .fattr = &rdata.fattr,
- }
- };
+ struct nfs_read_data *rdata;
+
+ rdata = nfs_readdata_alloc();
+ if (!rdata)
+ return -ENOMEM;
+
+ memset(rdata, 0, sizeof(*rdata));
+ rdata->flags = (IS_SWAPFILE(inode)? NFS_RPC_SWAPFLAGS : 0);
+ rdata->inode = inode;
+ INIT_LIST_HEAD(&rdata->pages);
+ rdata->args.fh = NFS_FH(inode);
+ rdata->args.lockowner = current->files;
+ rdata->args.pages = &page;
+ rdata->args.pgbase = 0UL;
+ rdata->args.count = rsize;
+ rdata->res.fattr = &rdata->fattr;