diff options
| -rw-r--r-- | fs/nfs/super.c | 67 |
1 files changed, 65 insertions, 2 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 3c6f53aa7317..c99ca1f992ce 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
| @@ -441,10 +441,52 @@ static const char *nfs_pseudoflavour_to_name(rpc_authflavor_t flavour) | |||
| 441 | return sec_flavours[i].str; | 441 | return sec_flavours[i].str; |
| 442 | } | 442 | } |
| 443 | 443 | ||
| 444 | static void nfs_show_mountd_options(struct seq_file *m, struct nfs_server *nfss, | ||
| 445 | int showdefaults) | ||
| 446 | { | ||
| 447 | struct sockaddr *sap = (struct sockaddr *)&nfss->mountd_address; | ||
| 448 | |||
| 449 | switch (sap->sa_family) { | ||
| 450 | case AF_INET: { | ||
| 451 | struct sockaddr_in *sin = (struct sockaddr_in *)sap; | ||
| 452 | seq_printf(m, ",mountaddr=" NIPQUAD_FMT, | ||
| 453 | NIPQUAD(sin->sin_addr.s_addr)); | ||
| 454 | break; | ||
| 455 | } | ||
| 456 | case AF_INET6: { | ||
| 457 | struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap; | ||
| 458 | seq_printf(m, ",mountaddr=" NIP6_FMT, | ||
| 459 | NIP6(sin6->sin6_addr)); | ||
| 460 | break; | ||
| 461 | } | ||
| 462 | default: | ||
| 463 | if (showdefaults) | ||
| 464 | seq_printf(m, ",mountaddr=unspecified"); | ||
| 465 | } | ||
| 466 | |||
| 467 | if (nfss->mountd_version || showdefaults) | ||
| 468 | seq_printf(m, ",mountvers=%u", nfss->mountd_version); | ||
| 469 | if (nfss->mountd_port || showdefaults) | ||
| 470 | seq_printf(m, ",mountport=%u", nfss->mountd_port); | ||
| 471 | |||
| 472 | switch (nfss->mountd_protocol) { | ||
| 473 | case IPPROTO_UDP: | ||
| 474 | seq_printf(m, ",mountproto=udp"); | ||
| 475 | break; | ||
| 476 | case IPPROTO_TCP: | ||
| 477 | seq_printf(m, ",mountproto=tcp"); | ||
| 478 | break; | ||
| 479 | default: | ||
| 480 | if (showdefaults) | ||
| 481 | seq_printf(m, ",mountproto=auto"); | ||
| 482 | } | ||
| 483 | } | ||
| 484 | |||
| 444 | /* | 485 | /* |
| 445 | * Describe the mount options in force on this server representation | 486 | * Describe the mount options in force on this server representation |
| 446 | */ | 487 | */ |
| 447 | static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss, int showdefaults) | 488 | static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss, |
| 489 | int showdefaults) | ||
| 448 | { | 490 | { |
| 449 | static const struct proc_nfs_info { | 491 | static const struct proc_nfs_info { |
| 450 | int flag; | 492 | int flag; |
| @@ -452,6 +494,8 @@ static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss, | |||
| 452 | const char *nostr; | 494 | const char *nostr; |
| 453 | } nfs_info[] = { | 495 | } nfs_info[] = { |
| 454 | { NFS_MOUNT_SOFT, ",soft", ",hard" }, | 496 | { NFS_MOUNT_SOFT, ",soft", ",hard" }, |
| 497 | { NFS_MOUNT_INTR, ",intr", ",nointr" }, | ||
| 498 | { NFS_MOUNT_POSIX, ",posix", "" }, | ||
| 455 | { NFS_MOUNT_NOCTO, ",nocto", "" }, | 499 | { NFS_MOUNT_NOCTO, ",nocto", "" }, |
| 456 | { NFS_MOUNT_NOAC, ",noac", "" }, | 500 | { NFS_MOUNT_NOAC, ",noac", "" }, |
| 457 | { NFS_MOUNT_NONLM, ",nolock", "" }, | 501 | { NFS_MOUNT_NONLM, ",nolock", "" }, |
| @@ -462,10 +506,14 @@ static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss, | |||
| 462 | }; | 506 | }; |
| 463 | const struct proc_nfs_info *nfs_infop; | 507 | const struct proc_nfs_info *nfs_infop; |
| 464 | struct nfs_client *clp = nfss->nfs_client; | 508 | struct nfs_client *clp = nfss->nfs_client; |
| 509 | u32 version = clp->rpc_ops->version; | ||
| 465 | 510 | ||
| 466 | seq_printf(m, ",vers=%u", clp->rpc_ops->version); | 511 | seq_printf(m, ",vers=%u", version); |
| 467 | seq_printf(m, ",rsize=%u", nfss->rsize); | 512 | seq_printf(m, ",rsize=%u", nfss->rsize); |
| 468 | seq_printf(m, ",wsize=%u", nfss->wsize); | 513 | seq_printf(m, ",wsize=%u", nfss->wsize); |
| 514 | if (nfss->bsize != 0) | ||
| 515 | seq_printf(m, ",bsize=%u", nfss->bsize); | ||
| 516 | seq_printf(m, ",namlen=%u", nfss->namelen); | ||
| 469 | if (nfss->acregmin != 3*HZ || showdefaults) | 517 | if (nfss->acregmin != 3*HZ || showdefaults) |
| 470 | seq_printf(m, ",acregmin=%u", nfss->acregmin/HZ); | 518 | seq_printf(m, ",acregmin=%u", nfss->acregmin/HZ); |
| 471 | if (nfss->acregmax != 60*HZ || showdefaults) | 519 | if (nfss->acregmax != 60*HZ || showdefaults) |
| @@ -482,9 +530,24 @@ static void nfs_show_mount_options(struct seq_file *m, struct nfs_server *nfss, | |||
| 482 | } | 530 | } |
| 483 | seq_printf(m, ",proto=%s", | 531 | seq_printf(m, ",proto=%s", |
| 484 | rpc_peeraddr2str(nfss->client, RPC_DISPLAY_PROTO)); | 532 | rpc_peeraddr2str(nfss->client, RPC_DISPLAY_PROTO)); |
| 533 | if (version == 4) { | ||
| 534 | if (nfss->port != NFS_PORT) | ||
| 535 | seq_printf(m, ",port=%u", nfss->port); | ||
| 536 | } else | ||
| 537 | if (nfss->port) | ||
| 538 | seq_printf(m, ",port=%u", nfss->port); | ||
| 539 | |||
| 485 | seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout->to_initval / HZ); | 540 | seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout->to_initval / HZ); |
| 486 | seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries); | 541 | seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries); |
| 487 | seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client->cl_auth->au_flavor)); | 542 | seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client->cl_auth->au_flavor)); |
| 543 | |||
| 544 | if (version != 4) | ||
| 545 | nfs_show_mountd_options(m, nfss, showdefaults); | ||
| 546 | |||
| 547 | #ifdef CONFIG_NFS_V4 | ||
| 548 | if (clp->rpc_ops->version == 4) | ||
| 549 | seq_printf(m, ",clientaddr=%s", clp->cl_ipaddr); | ||
| 550 | #endif | ||
| 488 | } | 551 | } |
| 489 | 552 | ||
| 490 | /* | 553 | /* |
