@@ -900,7 +900,11 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
if (mode == USE_RANDOM_MDS)
goto random;
-
+ // force to send the req to auth mds
+ if (ceph_test_mount_opt(mdsc->fsc, ALWAYS_AUTH) && mode != USE_AUTH_MDS){
+ dout("change mode %d => USE_AUTH_MDS", mode);
+ mode = USE_AUTH_MDS;
+ }
inode = NULL;
if (req->r_inode) {
if (ceph_snap(req->r_inode) != CEPH_SNAPDIR) {
@@ -169,6 +169,7 @@ enum {
Opt_noquotadf,
Opt_copyfrom,
Opt_nocopyfrom,
+ Opt_always_auth,
};
static match_table_t fsopt_tokens = {
@@ -210,6 +211,7 @@ enum {
{Opt_noquotadf, "noquotadf"},
{Opt_copyfrom, "copyfrom"},
{Opt_nocopyfrom, "nocopyfrom"},
+ {Opt_always_auth, "always_auth"},
{-1, NULL}
};
@@ -381,6 +383,9 @@ static int parse_fsopt_token(char *c, void *private)
case Opt_noacl:
fsopt->sb_flags &= ~SB_POSIXACL;
break;
+ case Opt_always_auth:
+ fsopt->flags |= CEPH_MOUNT_OPT_ALWAYS_AUTH;
+ break;
default:
BUG_ON(token);
}
@@ -563,6 +568,8 @@ static int ceph_show_options(struct seq_file *m, struct dentry *root)
seq_puts(m, ",nopoolperm");
if (fsopt->flags & CEPH_MOUNT_OPT_NOQUOTADF)
seq_puts(m, ",noquotadf");
+ if (fsopt->flags & CEPH_MOUNT_OPT_ALWAYS_AUTH)
+ seq_puts(m, ",always_auth");
#ifdef CONFIG_CEPH_FS_POSIX_ACL
if (fsopt->sb_flags & SB_POSIXACL)
@@ -41,6 +41,7 @@
#define CEPH_MOUNT_OPT_MOUNTWAIT (1<<12) /* mount waits if no mds is up */
#define CEPH_MOUNT_OPT_NOQUOTADF (1<<13) /* no root dir quota in statfs */
#define CEPH_MOUNT_OPT_NOCOPYFROM (1<<14) /* don't use RADOS 'copy-from' op */
+#define CEPH_MOUNT_OPT_ALWAYS_AUTH (1<<15) /* send op to auth mds, not to replicative mds */
#define CEPH_MOUNT_OPT_DEFAULT \
(CEPH_MOUNT_OPT_DCACHE | \