Whamcloud - gitweb
LU-10114 hsm: increase upper limit of maximum HSM backends registered with MDT
[fs/lustre-release.git] / lustre / llite / file.c
index 9a4bd91..a2c7294 100644 (file)
@@ -2656,8 +2656,9 @@ free:
 
 int ll_hsm_state_set(struct inode *inode, struct hsm_state_set *hss)
 {
-       struct md_op_data       *op_data;
-       int                      rc;
+       struct obd_export *exp = ll_i2mdexp(inode);
+       struct md_op_data *op_data;
+       int rc;
        ENTRY;
 
        /* Detect out-of range masks */
@@ -2670,18 +2671,20 @@ int ll_hsm_state_set(struct inode *inode, struct hsm_state_set *hss)
            !cfs_capable(CFS_CAP_SYS_ADMIN))
                RETURN(-EPERM);
 
-       /* Detect out-of range archive id */
-       if ((hss->hss_valid & HSS_ARCHIVE_ID) &&
-           (hss->hss_archive_id > LL_HSM_MAX_ARCHIVE))
-               RETURN(-EINVAL);
+       if (!exp_connect_archive_id_array(exp)) {
+               /* Detect out-of range archive id */
+               if ((hss->hss_valid & HSS_ARCHIVE_ID) &&
+                   (hss->hss_archive_id > LL_HSM_ORIGIN_MAX_ARCHIVE))
+                       RETURN(-EINVAL);
+       }
 
        op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0,
                                     LUSTRE_OPC_ANY, hss);
        if (IS_ERR(op_data))
                RETURN(PTR_ERR(op_data));
 
-       rc = obd_iocontrol(LL_IOC_HSM_STATE_SET, ll_i2mdexp(inode),
-                          sizeof(*op_data), op_data, NULL);
+       rc = obd_iocontrol(LL_IOC_HSM_STATE_SET, exp, sizeof(*op_data),
+                          op_data, NULL);
 
        ll_finish_md_op_data(op_data);