Whamcloud - gitweb
LU-16500 utils: 'lfs migrate' should select new OSTs
[fs/lustre-release.git] / lustre / target / tgt_mount.c
index 2a312f2..6ca4016 100644 (file)
 #include <linux/statfs.h>
 #include <linux/version.h>
 #include <linux/delay.h>
+#include <linux/file.h>
+#ifdef HAVE_FSMAP_H
+#include <linux/fsmap.h>
+#endif
 
 #include <llog_swab.h>
 #include <lustre_disk.h>
@@ -162,10 +166,10 @@ struct lustre_mount_info *server_get_mount(const char *name)
        }
        lsi = s2lsi(lmi->lmi_sb);
 
-       atomic_inc(&lsi->lsi_mounts);
+       kref_get(&lsi->lsi_mounts);
 
        CDEBUG(D_MOUNT, "get mount %p from %s, refs=%d\n", lmi->lmi_sb,
-              name, atomic_read(&lsi->lsi_mounts));
+              name, kref_read(&lsi->lsi_mounts));
 
        RETURN(lmi);
 }
@@ -199,7 +203,7 @@ int server_put_mount(const char *name, bool dereg_mnt)
        lsi = s2lsi(lmi->lmi_sb);
 
        CDEBUG(D_MOUNT, "put mount %p from %s, refs=%d\n",
-              lmi->lmi_sb, name, atomic_read(&lsi->lsi_mounts));
+              lmi->lmi_sb, name, kref_read(&lsi->lsi_mounts));
 
        if (lustre_put_lsi(lmi->lmi_sb))
                CDEBUG(D_MOUNT, "Last put of mount %p from %s\n",
@@ -1276,9 +1280,9 @@ static struct mgs_target_info *server_lsi2mti(struct lustre_sb_info *lsi)
        if (!mti)
                GOTO(free_list, mti = ERR_PTR(-ENOMEM));
 
-       if (strlcpy(mti->mti_svname, lsi->lsi_svname, sizeof(mti->mti_svname))
-           >= sizeof(mti->mti_svname))
-               GOTO(free_mti, rc = -E2BIG);
+       rc = strscpy(mti->mti_svname, lsi->lsi_svname, sizeof(mti->mti_svname));
+       if (rc < 0)
+               GOTO(free_mti, rc);
 
        mti->mti_nid_count = nid_count;
        for (i = 0; i < mti->mti_nid_count; i++) {
@@ -1310,7 +1314,7 @@ static struct mgs_target_info *server_lsi2mti(struct lustre_sb_info *lsi)
        /* use NID strings instead */
        if (large_nid)
                mti->mti_flags |= LDD_F_LARGE_NID;
-       cplen = strlcpy(mti->mti_params, lsi->lsi_lmd->lmd_params,
+       cplen = strscpy(mti->mti_params, lsi->lsi_lmd->lmd_params,
                        sizeof(mti->mti_params));
        if (cplen >= sizeof(mti->mti_params))
                rc = -E2BIG;
@@ -1631,13 +1635,13 @@ static int lsi_prepare(struct lustre_sb_info *lsi)
            strlen(fstype) >= sizeof(lsi->lsi_fstype))
                RETURN(-ENAMETOOLONG);
 
-       strlcpy(lsi->lsi_svname, lsi->lsi_lmd->lmd_profile,
+       strscpy(lsi->lsi_svname, lsi->lsi_lmd->lmd_profile,
                sizeof(lsi->lsi_svname));
-       strlcpy(lsi->lsi_osd_type, osd_type, sizeof(lsi->lsi_osd_type));
+       strscpy(lsi->lsi_osd_type, osd_type, sizeof(lsi->lsi_osd_type));
        /* XXX: a temp. solution for components using ldiskfs
         *      to be removed in one of the subsequent patches
         */
-       strlcpy(lsi->lsi_fstype, fstype, sizeof(lsi->lsi_fstype));
+       strscpy(lsi->lsi_fstype, fstype, sizeof(lsi->lsi_fstype));
 
        /* Determine server type */
        rc = server_name2index(lsi->lsi_svname, &index, NULL);
@@ -1965,7 +1969,7 @@ static int server_getattr(struct vfsmount *mnt, struct dentry *de,
        CDEBUG(D_SUPER, "%s: root_inode from %s ino=%lu, dev=%x\n",
               lsi->lsi_svname, root_inode == inode ? "lsi" : "vfsmnt",
               root_inode->i_ino, root_inode->i_rdev);
-       generic_fillattr(IDMAP_ARG root_inode, stat);
+       generic_fillattr(IDMAP_ARG RQMASK_ARG root_inode, stat);
        iput(root_inode);
 
        return 0;
@@ -2002,6 +2006,10 @@ static bool is_cmd_supported(unsigned int cmd)
                return true;
        case LL_IOC_RESIZE_FS:
                return true;
+#ifdef HAVE_FSMAP_H
+       case FS_IOC_GETFSMAP:
+               return true;
+#endif
        default:
                return false;
        }