1340 struct svc_export *exp;
1341 __be32 rv;
1342 u32 fsidv[2];
1343
1344 mk_fsid(FSID_NUM, fsidv, 0, 0, 0, NULL);
1345
1346 exp = rqst_exp_find(rqstp, FSID_NUM, fsidv);
1347 if (IS_ERR(exp))
1348 return nfserrno(PTR_ERR(exp));
1349 rv = fh_compose(fhp, exp, exp->ex_path.dentry, NULL);
1350 if (rv)
1351 goto out;
1352 rv = check_nfsd_access(exp, rqstp);
1353out:
1354 exp_put(exp);
1355 return rv;
1356}
1357
1358
1359
1360static void *e_start(struct seq_file *m, loff_t *pos)
1361 __acquires(svc_export_cache.hash_lock)
1362{
1363 loff_t n = *pos;
1364 unsigned hash, export;
1365 struct cache_head *ch;
1366
1367 exp_readlock();
1368 read_lock(&svc_export_cache.hash_lock);
1369 if (!n--)
1370 return SEQ_START_TOKEN;
1371 hash = n >> 32;
1372 export = n & ((1LL<<32) - 1);
1373
1374
1375 for (ch=export_table[hash]; ch; ch=ch->next)
1376 if (!export--)
1377 return ch;
1378 n &= ~((1LL<<32) - 1);
1379 do {
1380 hash++;