aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/inode.c
diff options
context:
space:
mode:
authorAnton Altaparmakov <aia21@cantab.net>2005-10-30 16:00:04 -0500
committerAnton Altaparmakov <aia21@cantab.net>2005-10-30 16:00:04 -0500
commit07b188ab773e183871e57b33ae37bf635c9f12ba (patch)
tree311df8a0dd12fb7bd3e9b5b1a5ca500f0428d679 /fs/nfs/inode.c
parent47c564e10f219f867bdb49225972749a43485a47 (diff)
parent9f75e1eff3edb2bb07349b94c28f4f2a6c66ca43 (diff)
Merge branch 'master' of /usr/src/ntfs-2.6/
Diffstat (limited to 'fs/nfs/inode.c')
-rw-r--r--fs/nfs/inode.c200
1 files changed, 131 insertions, 69 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index d4eadeea128e..f2781ca42761 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -358,6 +358,35 @@ out_no_root:
358 return no_root_error; 358 return no_root_error;
359} 359}
360 360
361static void nfs_init_timeout_values(struct rpc_timeout *to, int proto, unsigned int timeo, unsigned int retrans)
362{
363 to->to_initval = timeo * HZ / 10;
364 to->to_retries = retrans;
365 if (!to->to_retries)
366 to->to_retries = 2;
367
368 switch (proto) {
369 case IPPROTO_TCP:
370 if (!to->to_initval)
371 to->to_initval = 60 * HZ;
372 if (to->to_initval > NFS_MAX_TCP_TIMEOUT)
373 to->to_initval = NFS_MAX_TCP_TIMEOUT;
374 to->to_increment = to->to_initval;
375 to->to_maxval = to->to_initval + (to->to_increment * to->to_retries);
376 to->to_exponential = 0;
377 break;
378 case IPPROTO_UDP:
379 default:
380 if (!to->to_initval)
381 to->to_initval = 11 * HZ / 10;
382 if (to->to_initval > NFS_MAX_UDP_TIMEOUT)
383 to->to_initval = NFS_MAX_UDP_TIMEOUT;
384 to->to_maxval = NFS_MAX_UDP_TIMEOUT;
385 to->to_exponential = 1;
386 break;
387 }
388}
389
361/* 390/*
362 * Create an RPC client handle. 391 * Create an RPC client handle.
363 */ 392 */
@@ -367,22 +396,12 @@ nfs_create_client(struct nfs_server *server, const struct nfs_mount_data *data)
367 struct rpc_timeout timeparms; 396 struct rpc_timeout timeparms;
368 struct rpc_xprt *xprt = NULL; 397 struct rpc_xprt *xprt = NULL;
369 struct rpc_clnt *clnt = NULL; 398 struct rpc_clnt *clnt = NULL;
370 int tcp = (data->flags & NFS_MOUNT_TCP); 399 int proto = (data->flags & NFS_MOUNT_TCP) ? IPPROTO_TCP : IPPROTO_UDP;
371
372 /* Initialize timeout values */
373 timeparms.to_initval = data->timeo * HZ / 10;
374 timeparms.to_retries = data->retrans;
375 timeparms.to_maxval = tcp ? RPC_MAX_TCP_TIMEOUT : RPC_MAX_UDP_TIMEOUT;
376 timeparms.to_exponential = 1;
377 400
378 if (!timeparms.to_initval) 401 nfs_init_timeout_values(&timeparms, proto, data->timeo, data->retrans);
379 timeparms.to_initval = (tcp ? 600 : 11) * HZ / 10;
380 if (!timeparms.to_retries)
381 timeparms.to_retries = 5;
382 402
383 /* create transport and client */ 403 /* create transport and client */
384 xprt = xprt_create_proto(tcp ? IPPROTO_TCP : IPPROTO_UDP, 404 xprt = xprt_create_proto(proto, &server->addr, &timeparms);
385 &server->addr, &timeparms);
386 if (IS_ERR(xprt)) { 405 if (IS_ERR(xprt)) {
387 dprintk("%s: cannot create RPC transport. Error = %ld\n", 406 dprintk("%s: cannot create RPC transport. Error = %ld\n",
388 __FUNCTION__, PTR_ERR(xprt)); 407 __FUNCTION__, PTR_ERR(xprt));
@@ -576,7 +595,6 @@ static int nfs_show_options(struct seq_file *m, struct vfsmount *mnt)
576 { NFS_MOUNT_SOFT, ",soft", ",hard" }, 595 { NFS_MOUNT_SOFT, ",soft", ",hard" },
577 { NFS_MOUNT_INTR, ",intr", "" }, 596 { NFS_MOUNT_INTR, ",intr", "" },
578 { NFS_MOUNT_POSIX, ",posix", "" }, 597 { NFS_MOUNT_POSIX, ",posix", "" },
579 { NFS_MOUNT_TCP, ",tcp", ",udp" },
580 { NFS_MOUNT_NOCTO, ",nocto", "" }, 598 { NFS_MOUNT_NOCTO, ",nocto", "" },
581 { NFS_MOUNT_NOAC, ",noac", "" }, 599 { NFS_MOUNT_NOAC, ",noac", "" },
582 { NFS_MOUNT_NONLM, ",nolock", ",lock" }, 600 { NFS_MOUNT_NONLM, ",nolock", ",lock" },
@@ -585,6 +603,8 @@ static int nfs_show_options(struct seq_file *m, struct vfsmount *mnt)
585 }; 603 };
586 struct proc_nfs_info *nfs_infop; 604 struct proc_nfs_info *nfs_infop;
587 struct nfs_server *nfss = NFS_SB(mnt->mnt_sb); 605 struct nfs_server *nfss = NFS_SB(mnt->mnt_sb);
606 char buf[12];
607 char *proto;
588 608
589 seq_printf(m, ",v%d", nfss->rpc_ops->version); 609 seq_printf(m, ",v%d", nfss->rpc_ops->version);
590 seq_printf(m, ",rsize=%d", nfss->rsize); 610 seq_printf(m, ",rsize=%d", nfss->rsize);
@@ -603,6 +623,18 @@ static int nfs_show_options(struct seq_file *m, struct vfsmount *mnt)
603 else 623 else
604 seq_puts(m, nfs_infop->nostr); 624 seq_puts(m, nfs_infop->nostr);
605 } 625 }
626 switch (nfss->client->cl_xprt->prot) {
627 case IPPROTO_TCP:
628 proto = "tcp";
629 break;
630 case IPPROTO_UDP:
631 proto = "udp";
632 break;
633 default:
634 snprintf(buf, sizeof(buf), "%u", nfss->client->cl_xprt->prot);
635 proto = buf;
636 }
637 seq_printf(m, ",proto=%s", proto);
606 seq_puts(m, ",addr="); 638 seq_puts(m, ",addr=");
607 seq_escape(m, nfss->hostname, " \t\n\\"); 639 seq_escape(m, nfss->hostname, " \t\n\\");
608 return 0; 640 return 0;
@@ -753,7 +785,8 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
753 else 785 else
754 init_special_inode(inode, inode->i_mode, fattr->rdev); 786 init_special_inode(inode, inode->i_mode, fattr->rdev);
755 787
756 nfsi->read_cache_jiffies = fattr->timestamp; 788 nfsi->read_cache_jiffies = fattr->time_start;
789 nfsi->last_updated = jiffies;
757 inode->i_atime = fattr->atime; 790 inode->i_atime = fattr->atime;
758 inode->i_mtime = fattr->mtime; 791 inode->i_mtime = fattr->mtime;
759 inode->i_ctime = fattr->ctime; 792 inode->i_ctime = fattr->ctime;
@@ -821,6 +854,11 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr)
821 filemap_fdatawait(inode->i_mapping); 854 filemap_fdatawait(inode->i_mapping);
822 nfs_wb_all(inode); 855 nfs_wb_all(inode);
823 } 856 }
857 /*
858 * Return any delegations if we're going to change ACLs
859 */
860 if ((attr->ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID)) != 0)
861 nfs_inode_return_delegation(inode);
824 error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr); 862 error = NFS_PROTO(inode)->setattr(dentry, &fattr, attr);
825 if (error == 0) 863 if (error == 0)
826 nfs_refresh_inode(inode, &fattr); 864 nfs_refresh_inode(inode, &fattr);
@@ -1019,15 +1057,11 @@ int nfs_open(struct inode *inode, struct file *filp)
1019 ctx->mode = filp->f_mode; 1057 ctx->mode = filp->f_mode;
1020 nfs_file_set_open_context(filp, ctx); 1058 nfs_file_set_open_context(filp, ctx);
1021 put_nfs_open_context(ctx); 1059 put_nfs_open_context(ctx);
1022 if ((filp->f_mode & FMODE_WRITE) != 0)
1023 nfs_begin_data_update(inode);
1024 return 0; 1060 return 0;
1025} 1061}
1026 1062
1027int nfs_release(struct inode *inode, struct file *filp) 1063int nfs_release(struct inode *inode, struct file *filp)
1028{ 1064{
1029 if ((filp->f_mode & FMODE_WRITE) != 0)
1030 nfs_end_data_update(inode);
1031 nfs_file_clear_open_context(filp); 1065 nfs_file_clear_open_context(filp);
1032 return 0; 1066 return 0;
1033} 1067}
@@ -1083,14 +1117,15 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1083 goto out; 1117 goto out;
1084 } 1118 }
1085 1119
1120 spin_lock(&inode->i_lock);
1086 status = nfs_update_inode(inode, &fattr, verifier); 1121 status = nfs_update_inode(inode, &fattr, verifier);
1087 if (status) { 1122 if (status) {
1123 spin_unlock(&inode->i_lock);
1088 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n", 1124 dfprintk(PAGECACHE, "nfs_revalidate_inode: (%s/%Ld) refresh failed, error=%d\n",
1089 inode->i_sb->s_id, 1125 inode->i_sb->s_id,
1090 (long long)NFS_FILEID(inode), status); 1126 (long long)NFS_FILEID(inode), status);
1091 goto out; 1127 goto out;
1092 } 1128 }
1093 spin_lock(&inode->i_lock);
1094 cache_validity = nfsi->cache_validity; 1129 cache_validity = nfsi->cache_validity;
1095 nfsi->cache_validity &= ~NFS_INO_REVAL_PAGECACHE; 1130 nfsi->cache_validity &= ~NFS_INO_REVAL_PAGECACHE;
1096 1131
@@ -1098,7 +1133,7 @@ __nfs_revalidate_inode(struct nfs_server *server, struct inode *inode)
1098 * We may need to keep the attributes marked as invalid if 1133 * We may need to keep the attributes marked as invalid if
1099 * we raced with nfs_end_attr_update(). 1134 * we raced with nfs_end_attr_update().
1100 */ 1135 */
1101 if (verifier == nfsi->cache_change_attribute) 1136 if (time_after_eq(verifier, nfsi->cache_change_attribute))
1102 nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME); 1137 nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME);
1103 spin_unlock(&inode->i_lock); 1138 spin_unlock(&inode->i_lock);
1104 1139
@@ -1165,7 +1200,7 @@ void nfs_revalidate_mapping(struct inode *inode, struct address_space *mapping)
1165 if (S_ISDIR(inode->i_mode)) { 1200 if (S_ISDIR(inode->i_mode)) {
1166 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf)); 1201 memset(nfsi->cookieverf, 0, sizeof(nfsi->cookieverf));
1167 /* This ensures we revalidate child dentries */ 1202 /* This ensures we revalidate child dentries */
1168 nfsi->cache_change_attribute++; 1203 nfsi->cache_change_attribute = jiffies;
1169 } 1204 }
1170 spin_unlock(&inode->i_lock); 1205 spin_unlock(&inode->i_lock);
1171 1206
@@ -1197,20 +1232,19 @@ void nfs_end_data_update(struct inode *inode)
1197 struct nfs_inode *nfsi = NFS_I(inode); 1232 struct nfs_inode *nfsi = NFS_I(inode);
1198 1233
1199 if (!nfs_have_delegation(inode, FMODE_READ)) { 1234 if (!nfs_have_delegation(inode, FMODE_READ)) {
1200 /* Mark the attribute cache for revalidation */ 1235 /* Directories and symlinks: invalidate page cache */
1201 spin_lock(&inode->i_lock); 1236 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) {
1202 nfsi->cache_validity |= NFS_INO_INVALID_ATTR; 1237 spin_lock(&inode->i_lock);
1203 /* Directories and symlinks: invalidate page cache too */
1204 if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))
1205 nfsi->cache_validity |= NFS_INO_INVALID_DATA; 1238 nfsi->cache_validity |= NFS_INO_INVALID_DATA;
1206 spin_unlock(&inode->i_lock); 1239 spin_unlock(&inode->i_lock);
1240 }
1207 } 1241 }
1208 nfsi->cache_change_attribute ++; 1242 nfsi->cache_change_attribute = jiffies;
1209 atomic_dec(&nfsi->data_updates); 1243 atomic_dec(&nfsi->data_updates);
1210} 1244}
1211 1245
1212/** 1246/**
1213 * nfs_refresh_inode - verify consistency of the inode attribute cache 1247 * nfs_check_inode_attributes - verify consistency of the inode attribute cache
1214 * @inode - pointer to inode 1248 * @inode - pointer to inode
1215 * @fattr - updated attributes 1249 * @fattr - updated attributes
1216 * 1250 *
@@ -1218,13 +1252,12 @@ void nfs_end_data_update(struct inode *inode)
1218 * so that fattr carries weak cache consistency data, then it may 1252 * so that fattr carries weak cache consistency data, then it may
1219 * also update the ctime/mtime/change_attribute. 1253 * also update the ctime/mtime/change_attribute.
1220 */ 1254 */
1221int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) 1255static int nfs_check_inode_attributes(struct inode *inode, struct nfs_fattr *fattr)
1222{ 1256{
1223 struct nfs_inode *nfsi = NFS_I(inode); 1257 struct nfs_inode *nfsi = NFS_I(inode);
1224 loff_t cur_size, new_isize; 1258 loff_t cur_size, new_isize;
1225 int data_unstable; 1259 int data_unstable;
1226 1260
1227 spin_lock(&inode->i_lock);
1228 1261
1229 /* Are we in the process of updating data on the server? */ 1262 /* Are we in the process of updating data on the server? */
1230 data_unstable = nfs_caches_unstable(inode); 1263 data_unstable = nfs_caches_unstable(inode);
@@ -1288,11 +1321,67 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1288 if (!timespec_equal(&inode->i_atime, &fattr->atime)) 1321 if (!timespec_equal(&inode->i_atime, &fattr->atime))
1289 nfsi->cache_validity |= NFS_INO_INVALID_ATIME; 1322 nfsi->cache_validity |= NFS_INO_INVALID_ATIME;
1290 1323
1291 nfsi->read_cache_jiffies = fattr->timestamp; 1324 nfsi->read_cache_jiffies = fattr->time_start;
1292 spin_unlock(&inode->i_lock);
1293 return 0; 1325 return 0;
1294} 1326}
1295 1327
1328/**
1329 * nfs_refresh_inode - try to update the inode attribute cache
1330 * @inode - pointer to inode
1331 * @fattr - updated attributes
1332 *
1333 * Check that an RPC call that returned attributes has not overlapped with
1334 * other recent updates of the inode metadata, then decide whether it is
1335 * safe to do a full update of the inode attributes, or whether just to
1336 * call nfs_check_inode_attributes.
1337 */
1338int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
1339{
1340 struct nfs_inode *nfsi = NFS_I(inode);
1341 int status;
1342
1343 if ((fattr->valid & NFS_ATTR_FATTR) == 0)
1344 return 0;
1345 spin_lock(&inode->i_lock);
1346 nfsi->cache_validity &= ~NFS_INO_REVAL_PAGECACHE;
1347 if (nfs_verify_change_attribute(inode, fattr->time_start))
1348 nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME);
1349 if (time_after(fattr->time_start, nfsi->last_updated))
1350 status = nfs_update_inode(inode, fattr, fattr->time_start);
1351 else
1352 status = nfs_check_inode_attributes(inode, fattr);
1353
1354 spin_unlock(&inode->i_lock);
1355 return status;
1356}
1357
1358/**
1359 * nfs_post_op_update_inode - try to update the inode attribute cache
1360 * @inode - pointer to inode
1361 * @fattr - updated attributes
1362 *
1363 * After an operation that has changed the inode metadata, mark the
1364 * attribute cache as being invalid, then try to update it.
1365 */
1366int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
1367{
1368 struct nfs_inode *nfsi = NFS_I(inode);
1369 int status = 0;
1370
1371 spin_lock(&inode->i_lock);
1372 if (unlikely((fattr->valid & NFS_ATTR_FATTR) == 0)) {
1373 nfsi->cache_validity |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS;
1374 goto out;
1375 }
1376 status = nfs_update_inode(inode, fattr, fattr->time_start);
1377 if (time_after_eq(fattr->time_start, nfsi->cache_change_attribute))
1378 nfsi->cache_validity &= ~(NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ATIME|NFS_INO_REVAL_PAGECACHE);
1379 nfsi->cache_change_attribute = jiffies;
1380out:
1381 spin_unlock(&inode->i_lock);
1382 return status;
1383}
1384
1296/* 1385/*
1297 * Many nfs protocol calls return the new file attributes after 1386 * Many nfs protocol calls return the new file attributes after
1298 * an operation. Here we update the inode to reflect the state 1387 * an operation. Here we update the inode to reflect the state
@@ -1328,20 +1417,17 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr, unsign
1328 goto out_err; 1417 goto out_err;
1329 } 1418 }
1330 1419
1331 spin_lock(&inode->i_lock);
1332
1333 /* 1420 /*
1334 * Make sure the inode's type hasn't changed. 1421 * Make sure the inode's type hasn't changed.
1335 */ 1422 */
1336 if ((inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT)) { 1423 if ((inode->i_mode & S_IFMT) != (fattr->mode & S_IFMT))
1337 spin_unlock(&inode->i_lock);
1338 goto out_changed; 1424 goto out_changed;
1339 }
1340 1425
1341 /* 1426 /*
1342 * Update the read time so we don't revalidate too often. 1427 * Update the read time so we don't revalidate too often.
1343 */ 1428 */
1344 nfsi->read_cache_jiffies = fattr->timestamp; 1429 nfsi->read_cache_jiffies = fattr->time_start;
1430 nfsi->last_updated = jiffies;
1345 1431
1346 /* Are we racing with known updates of the metadata on the server? */ 1432 /* Are we racing with known updates of the metadata on the server? */
1347 data_unstable = ! (nfs_verify_change_attribute(inode, verifier) || 1433 data_unstable = ! (nfs_verify_change_attribute(inode, verifier) ||
@@ -1354,7 +1440,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr, unsign
1354 /* Do we perhaps have any outstanding writes? */ 1440 /* Do we perhaps have any outstanding writes? */
1355 if (nfsi->npages == 0) { 1441 if (nfsi->npages == 0) {
1356 /* No, but did we race with nfs_end_data_update()? */ 1442 /* No, but did we race with nfs_end_data_update()? */
1357 if (verifier == nfsi->cache_change_attribute) { 1443 if (time_after_eq(verifier, nfsi->cache_change_attribute)) {
1358 inode->i_size = new_isize; 1444 inode->i_size = new_isize;
1359 invalid |= NFS_INO_INVALID_DATA; 1445 invalid |= NFS_INO_INVALID_DATA;
1360 } 1446 }
@@ -1430,7 +1516,6 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr, unsign
1430 if (!nfs_have_delegation(inode, FMODE_READ)) 1516 if (!nfs_have_delegation(inode, FMODE_READ))
1431 nfsi->cache_validity |= invalid; 1517 nfsi->cache_validity |= invalid;
1432 1518
1433 spin_unlock(&inode->i_lock);
1434 return 0; 1519 return 0;
1435 out_changed: 1520 out_changed:
1436 /* 1521 /*
@@ -1639,8 +1724,7 @@ static void nfs4_clear_inode(struct inode *inode)
1639 struct nfs_inode *nfsi = NFS_I(inode); 1724 struct nfs_inode *nfsi = NFS_I(inode);
1640 1725
1641 /* If we are holding a delegation, return it! */ 1726 /* If we are holding a delegation, return it! */
1642 if (nfsi->delegation != NULL) 1727 nfs_inode_return_delegation(inode);
1643 nfs_inode_return_delegation(inode);
1644 /* First call standard NFS clear_inode() code */ 1728 /* First call standard NFS clear_inode() code */
1645 nfs_clear_inode(inode); 1729 nfs_clear_inode(inode);
1646 /* Now clear out any remaining state */ 1730 /* Now clear out any remaining state */
@@ -1669,7 +1753,7 @@ static int nfs4_fill_super(struct super_block *sb, struct nfs4_mount_data *data,
1669 struct rpc_clnt *clnt = NULL; 1753 struct rpc_clnt *clnt = NULL;
1670 struct rpc_timeout timeparms; 1754 struct rpc_timeout timeparms;
1671 rpc_authflavor_t authflavour; 1755 rpc_authflavor_t authflavour;
1672 int proto, err = -EIO; 1756 int err = -EIO;
1673 1757
1674 sb->s_blocksize_bits = 0; 1758 sb->s_blocksize_bits = 0;
1675 sb->s_blocksize = 0; 1759 sb->s_blocksize = 0;
@@ -1687,30 +1771,8 @@ static int nfs4_fill_super(struct super_block *sb, struct nfs4_mount_data *data,
1687 server->acdirmax = data->acdirmax*HZ; 1771 server->acdirmax = data->acdirmax*HZ;
1688 1772
1689 server->rpc_ops = &nfs_v4_clientops; 1773 server->rpc_ops = &nfs_v4_clientops;
1690 /* Initialize timeout values */
1691
1692 timeparms.to_initval = data->timeo * HZ / 10;
1693 timeparms.to_retries = data->retrans;
1694 timeparms.to_exponential = 1;
1695 if (!timeparms.to_retries)
1696 timeparms.to_retries = 5;
1697 1774
1698 proto = data->proto; 1775 nfs_init_timeout_values(&timeparms, data->proto, data->timeo, data->retrans);
1699 /* Which IP protocol do we use? */
1700 switch (proto) {
1701 case IPPROTO_TCP:
1702 timeparms.to_maxval = RPC_MAX_TCP_TIMEOUT;
1703 if (!timeparms.to_initval)
1704 timeparms.to_initval = 600 * HZ / 10;
1705 break;
1706 case IPPROTO_UDP:
1707 timeparms.to_maxval = RPC_MAX_UDP_TIMEOUT;
1708 if (!timeparms.to_initval)
1709 timeparms.to_initval = 11 * HZ / 10;
1710 break;
1711 default:
1712 return -EINVAL;
1713 }
1714 1776
1715 clp = nfs4_get_client(&server->addr.sin_addr); 1777 clp = nfs4_get_client(&server->addr.sin_addr);
1716 if (!clp) { 1778 if (!clp) {
@@ -1735,7 +1797,7 @@ static int nfs4_fill_super(struct super_block *sb, struct nfs4_mount_data *data,
1735 1797
1736 down_write(&clp->cl_sem); 1798 down_write(&clp->cl_sem);
1737 if (IS_ERR(clp->cl_rpcclient)) { 1799 if (IS_ERR(clp->cl_rpcclient)) {
1738 xprt = xprt_create_proto(proto, &server->addr, &timeparms); 1800 xprt = xprt_create_proto(data->proto, &server->addr, &timeparms);
1739 if (IS_ERR(xprt)) { 1801 if (IS_ERR(xprt)) {
1740 up_write(&clp->cl_sem); 1802 up_write(&clp->cl_sem);
1741 err = PTR_ERR(xprt); 1803 err = PTR_ERR(xprt);