summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
1cb4a25)
When nfs4 mount fail because the exported directory does
not exist, the mount command claims the local mount point
does not exist which is wrong. This patch fixes that problem
as well as makes the v4 mount failures look like v3/v2 failures.
Signed-off-by: Steve Dickson <steved@redhat.com>
Signed-off-by: Neil Brown <neilb@suse.de>
-static void mount_error(char *node)
+static void mount_error(char *mntpnt, char *node)
{
switch(errno) {
case ENOTDIR:
{
switch(errno) {
case ENOTDIR:
- fprintf(stderr, "%s: mount point %s is not a directory\n", progname, node);
+ fprintf(stderr, "%s: mount point %s is not a directory\n",
+ progname, mntpnt);
- fprintf(stderr, "%s: %s is already mounted or busy\n", progname, node);
+ fprintf(stderr, "%s: %s is already mounted or busy\n",
+ progname, mntpnt);
- fprintf(stderr, "%s: mount point %s does not exist\n", progname, node);
+ if (node) {
+ fprintf(stderr, "%s: %s failed, reason given by server: %s\n",
+ progname, node, strerror(errno));
+ } else
+ fprintf(stderr, "%s: mount point %s does not exist\n",
+ progname, mntpnt);
break;
default:
fprintf(stderr, "%s: %s\n", progname, strerror(errno));
}
}
break;
default:
fprintf(stderr, "%s: %s\n", progname, strerror(errno));
}
}
+static int chk_mountpoint(mount_point)
+{
+ struct stat sb;
+
+ if (stat(mount_point, &sb) < 0){
+ mount_error(mount_point, NULL);
+ return 1;
+ }
+ if (S_ISDIR(sb.st_mode) == 0){
+ errno = ENOTDIR;
+ mount_error(mount_point, NULL);
+ return 1;
+ }
+ if (access(mount_point, X_OK) < 0) {
+ mount_error(mount_point, NULL);
+ return 1;
+ }
+
+ return 0;
+}
extern u_short getport(
struct sockaddr_in *saddr,
extern u_short getport(
struct sockaddr_in *saddr,
+ if (chk_mountpoint(mount_point))
+ exit(EX_FAIL);
+
if (nfs_mount_vers == 4)
mnt_err = nfs4mount(spec, mount_point, &flags, &extra_opts, &mount_opts, 0);
else {
if (nfs_mount_vers == 4)
mnt_err = nfs4mount(spec, mount_point, &flags, &extra_opts, &mount_opts, 0);
else {
mount_opts);
if (mnt_err) {
mount_opts);
if (mnt_err) {
- mount_error(mount_point);
+ mount_error(mount_point, spec);