Whamcloud - gitweb
LU-4694 hsm: Cleanup codes about return value 55/9455/3
authorJames Nunez <james.a.nunez@intel.com>
Thu, 15 May 2014 19:46:59 +0000 (13:46 -0600)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 1 Jul 2014 04:35:18 +0000 (04:35 +0000)
errno migh be zero when llapi_hsm_action_get_fd() returns a failure.
ct_archive() does not handle it correctly, which might cause HSM take
the operation as successful even if it actually fails.

The patch also cleanup other codes about return value.

Signed-off-by: Li Xi <lixi@ddn.com>
Signed-off-by: James Nunez <james.a.nunez@intel.com>
Change-Id: I625da68836f98346b104533a556c72f06232e3ef
Reviewed-on: http://review.whamcloud.com/9455
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Faccini Bruno <bruno.faccini@intel.com>
Reviewed-by: Robert Read <robert.read@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/utils/lhsmtool_posix.c
lustre/utils/liblustreapi_hsm.c

index 31e5486..2e18351 100644 (file)
@@ -488,8 +488,8 @@ static int ct_restore_stripe(const char *src, const char *dst, int dst_fd,
        rc = fsetxattr(dst_fd, XATTR_LUSTRE_LOV, lovea, lovea_size,
                       XATTR_CREATE);
        if (rc < 0) {
-               CT_ERROR(errno, "cannot set lov EA on '%s'", dst);
                rc = -errno;
+               CT_ERROR(rc, "cannot set lov EA on '%s'", dst);
        }
 
        return rc;
@@ -880,7 +880,7 @@ static int ct_archive(const struct hsm_action_item *hai, const long hal_flags)
 
        src_fd = llapi_hsm_action_get_fd(hcp);
        if (src_fd < 0) {
-               rc = -errno;
+               rc = src_fd;
                CT_ERROR(rc, "cannot open '%s' for read", src);
                goto fini_major;
        }
@@ -1139,6 +1139,11 @@ static int ct_restore(const struct hsm_action_item *hai, const long hal_flags)
        }
 
        dst_fd = llapi_hsm_action_get_fd(hcp);
+       if (dst_fd < 0) {
+               rc = dst_fd;
+               CT_ERROR(rc, "cannot open '%s' for write", dst);
+               goto fini;
+       }
 
        if (set_lovea) {
                /* the layout cannot be allocated through .fid so we have to
index 2ca1756..c46435a 100644 (file)
@@ -922,10 +922,12 @@ static int ct_open_by_fid(const struct hsm_copytool_private *ct,
                          const struct lu_fid *fid, int open_flags)
 {
        char fid_name[FID_NOBRACE_LEN + 1];
+       int fd;
 
        snprintf(fid_name, sizeof(fid_name), DFID_NOBRACE, PFID(fid));
 
-       return openat(ct->open_by_fid_fd, fid_name, open_flags);
+       fd = openat(ct->open_by_fid_fd, fid_name, open_flags);
+       return fd < 0 ? -errno : fd;
 }
 
 static int ct_stat_by_fid(const struct hsm_copytool_private *ct,
@@ -933,10 +935,12 @@ static int ct_stat_by_fid(const struct hsm_copytool_private *ct,
                          struct stat *buf)
 {
        char fid_name[FID_NOBRACE_LEN + 1];
+       int rc;
 
        snprintf(fid_name, sizeof(fid_name), DFID_NOBRACE, PFID(fid));
 
-       return fstatat(ct->open_by_fid_fd, fid_name, buf, 0);
+       rc = fstatat(ct->open_by_fid_fd, fid_name, buf, 0);
+       return rc ? -errno : 0;
 }
 
 /** Create the destination volatile file for a restore operation.
@@ -1207,17 +1211,20 @@ int llapi_hsm_action_get_dfid(const struct hsm_copyaction_private *hcp,
 int llapi_hsm_action_get_fd(const struct hsm_copyaction_private *hcp)
 {
        const struct hsm_action_item    *hai = &hcp->copy.hc_hai;
+       int fd;
 
        if (hcp->magic != CP_PRIV_MAGIC)
                return -EINVAL;
 
-       if (hai->hai_action == HSMA_ARCHIVE)
+       if (hai->hai_action == HSMA_ARCHIVE) {
                return ct_open_by_fid(hcp->ct_priv, &hai->hai_dfid,
                                O_RDONLY | O_NOATIME | O_NOFOLLOW | O_NONBLOCK);
-       else if (hai->hai_action == HSMA_RESTORE)
-               return dup(hcp->data_fd);
-       else
+       } else if (hai->hai_action == HSMA_RESTORE) {
+               fd = dup(hcp->data_fd);
+               return fd < 0 ? -errno : fd;
+       } else {
                return -EINVAL;
+       }
 }
 
 /**
@@ -1251,9 +1258,9 @@ int llapi_hsm_import(const char *dst, int archive, const struct stat *st,
                                  stripe_pattern | LOV_PATTERN_F_RELEASED,
                                  pool_name);
        if (fd < 0) {
-               llapi_error(LLAPI_MSG_ERROR, -errno,
+               llapi_error(LLAPI_MSG_ERROR, fd,
                            "cannot create '%s' for import", dst);
-               return -errno;
+               return fd;
        }
 
        /* Get the new fid in Lustre. Caller needs to use this fid
@@ -1276,8 +1283,8 @@ int llapi_hsm_import(const char *dst, int archive, const struct stat *st,
        hui.hui_mtime_ns = st->st_mtim.tv_nsec;
        rc = ioctl(fd, LL_IOC_HSM_IMPORT, &hui);
        if (rc != 0) {
-               llapi_error(LLAPI_MSG_ERROR, rc, "cannot import '%s'", dst);
                rc = -errno;
+               llapi_error(LLAPI_MSG_ERROR, rc, "cannot import '%s'", dst);
                goto out_unlink;
        }