From: Steve Dickson <SteveD@redhat.com>
To: Tony Asleson <tasleson@redhat.com>
Cc: Neil Brown <neilb@suse.de>, linux-nfs@vger.kernel.org
Subject: Re: [PATCH] exportfs: Return non-zero exit value on error
Date: Tue, 22 Oct 2013 04:36:24 -0400 [thread overview]
Message-ID: <52663908.1090708@RedHat.com> (raw)
In-Reply-To: <52663791.6020605@RedHat.com>
On 22/10/13 04:30, Steve Dickson wrote:
>
>
> On 02/10/13 19:29, Tony Asleson wrote:
>> To improve error handling when scripting exportfs it's useful
>> to have non-zero exit codes when the requested operation did not
>> succeed.
>>
>> This patch also returns a non-zero exit code if you request to
>> unexport a non-existant share.
>>
>> Signed-off-by: Tony Asleson <tasleson@redhat.com>
> Committed!
Unfortunately I did not see Neil's patch before I committed this patch....
So I'm going to revert this patch in favor of Neil's...
steved.
>
> steved.
>
>> ---
>> support/export/hostname.c | 2 ++
>> utils/exportfs/exportfs.c | 37 +++++++++++++++++++++++++++----------
>> 2 files changed, 29 insertions(+), 10 deletions(-)
>>
>> diff --git a/support/export/hostname.c b/support/export/hostname.c
>> index 3e949a1..e53d692 100644
>> --- a/support/export/hostname.c
>> +++ b/support/export/hostname.c
>> @@ -175,10 +175,12 @@ host_addrinfo(const char *hostname)
>> case 0:
>> return ai;
>> case EAI_SYSTEM:
>> + export_errno = errno;
>> xlog(D_GENERAL, "%s: failed to resolve %s: (%d) %m",
>> __func__, hostname, errno);
>> break;
>> default:
>> + export_errno = EINVAL;
>> xlog(D_GENERAL, "%s: failed to resolve %s: %s",
>> __func__, hostname, gai_strerror(error));
>> break;
>> diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
>> index 52fc03d..318deb3 100644
>> --- a/utils/exportfs/exportfs.c
>> +++ b/utils/exportfs/exportfs.c
>> @@ -35,8 +35,8 @@
>> #include "xlog.h"
>>
>> static void export_all(int verbose);
>> -static void exportfs(char *arg, char *options, int verbose);
>> -static void unexportfs(char *arg, int verbose);
>> +static int exportfs(char *arg, char *options, int verbose);
>> +static int unexportfs(char *arg, int verbose);
>> static void exports_update(int verbose);
>> static void dump(int verbose, int export_format);
>> static void error(nfs_export *exp, int err);
>> @@ -187,8 +187,12 @@ main(int argc, char **argv)
>> if (f_all)
>> export_all(f_verbose);
>> else
>> - for (i = optind; i < argc ; i++)
>> - exportfs(argv[i], options, f_verbose);
>> + for (i = optind; i < argc ; i++) {
>> + if(!exportfs(argv[i], options, f_verbose)) {
>> + /* Only flag a generic EINVAL if no errno is set */
>> + export_errno = (export_errno) ? export_errno : EINVAL;
>> + }
>> + }
>> }
>> /* If we are unexporting everything, then
>> * don't care about what should be exported, as that
>> @@ -201,8 +205,12 @@ main(int argc, char **argv)
>> if (!f_reexport)
>> xtab_export_read();
>> if (!f_export)
>> - for (i = optind ; i < argc ; i++)
>> - unexportfs(argv[i], f_verbose);
>> + for (i = optind ; i < argc ; i++) {
>> + if (!unexportfs(argv[i], f_verbose)) {
>> + /* Only flag a generic EINVAL if no errno is set */
>> + export_errno = (export_errno) ? export_errno : EINVAL;
>> + }
>> + }
>> if (!new_cache)
>> rmtab_read();
>> }
>> @@ -296,9 +304,10 @@ export_all(int verbose)
>> }
>>
>>
>> -static void
>> +static int
>> exportfs(char *arg, char *options, int verbose)
>> {
>> + int rc = 0;
>> struct exportent *eep;
>> nfs_export *exp = NULL;
>> struct addrinfo *ai = NULL;
>> @@ -311,7 +320,8 @@ exportfs(char *arg, char *options, int verbose)
>>
>> if (!path || *path != '/') {
>> xlog(L_ERROR, "Invalid exporting option: %s", arg);
>> - return;
>> + export_errno = EINVAL;
>> + return rc;
>> }
>>
>> if ((htype = client_gettype(hname)) == MCL_FQDN) {
>> @@ -339,13 +349,16 @@ exportfs(char *arg, char *options, int verbose)
>> exp->m_warned = 0;
>> validate_export(exp);
>>
>> + rc = 1;
>> out:
>> freeaddrinfo(ai);
>> + return rc;
>> }
>>
>> -static void
>> +static int
>> unexportfs(char *arg, int verbose)
>> {
>> + int rc = 0;
>> nfs_export *exp;
>> struct addrinfo *ai = NULL;
>> char *path;
>> @@ -357,7 +370,8 @@ unexportfs(char *arg, int verbose)
>>
>> if (!path || *path != '/') {
>> xlog(L_ERROR, "Invalid unexporting option: %s", arg);
>> - return;
>> + export_errno = EINVAL;
>> + return rc;
>> }
>>
>> if ((htype = client_gettype(hname)) == MCL_FQDN) {
>> @@ -397,9 +411,11 @@ unexportfs(char *arg, int verbose)
>> #endif
>> exp->m_xtabent = 0;
>> exp->m_mayexport = 0;
>> + rc = 1;
>> }
>>
>> freeaddrinfo(ai);
>> + return rc;
>> }
>>
>> static int can_test(void)
>> @@ -728,6 +744,7 @@ error(nfs_export *exp, int err)
>> {
>> xlog(L_ERROR, "%s:%s: %s", exp->m_client->m_hostname,
>> exp->m_export.e_path, strerror(err));
>> + export_errno = (export_errno) ? export_errno : err;
>> }
>>
>> static void
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2013-10-22 8:35 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-02 23:29 [PATCH] exportfs: Return non-zero exit value on error Tony Asleson
2013-10-21 22:25 ` NeilBrown
2013-10-22 8:38 ` Steve Dickson
2013-10-22 15:23 ` Tony Asleson
2013-10-23 1:44 ` NeilBrown
2013-10-23 17:36 ` Tony Asleson
2013-10-23 22:18 ` NeilBrown
2013-10-23 23:31 ` Chuck Lever
2013-10-24 15:56 ` Steve Dickson
2013-10-24 16:05 ` Chuck Lever
2013-10-28 3:39 ` NeilBrown
2013-10-28 14:09 ` Chuck Lever
2013-10-24 5:34 ` Tony Asleson
2013-10-22 8:30 ` Steve Dickson
2013-10-22 8:36 ` Steve Dickson [this message]
2013-10-28 22:35 ` NeilBrown
2013-11-04 15:33 ` Steve Dickson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52663908.1090708@RedHat.com \
--to=steved@redhat.com \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=tasleson@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.