obd_cache.h obd_lov.h lustre_dlm.h lustre_handles.h lustre_disk.h \
lustre_net.h obd_class.h obd_ost.h obd_support.h lustre_commit_confd.h \
lustre_export.h lustre_log.h obd_echo.h \
- lustre_compat25.h lustre_fsfilt.h lustre_import.h lustre_mds.h obd.h \
- lvfs.h lvfs_linux.h lustre_cfg.h lustre_lite.h lustre_idl.h \
+ lustre_compat25.h lustre_fsfilt.h lustre_import.h lustre_mds.h lustre_mdc.h \
+ lustre_acl.h obd.h lvfs.h lvfs_linux.h lustre_cfg.h lustre_lite.h lustre_idl.h \
lustre_quota.h lustre_ucache.h lustre_ver.h.in lustre_param.h lu_object.h
--- /dev/null
+/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
+ * vim:expandtab:shiftwidth=8:tabstop=8:
+ *
+ * This file is part of Lustre, http://www.lustre.org
+ *
+ * MDS data structures.
+ * See also lustre_idl.h for wire formats of requests.
+ */
+
+#ifndef _LUSTRE_ACL_H
+#define _LUSTRE_ACL_H
+
+#ifdef __KERNEL__
+# include <linux/fs.h>
+# include <linux/dcache.h>
+# ifdef CONFIG_FS_POSIX_ACL
+# include <linux/xattr_acl.h>
+# endif
+#endif
+#include <linux/lustre_handles.h>
+#include <libcfs/kp30.h>
+#include <linux/lustre_idl.h>
+#include <linux/lustre_lib.h>
+#include <linux/lustre_dlm.h>
+#include <linux/lustre_log.h>
+#include <linux/lustre_export.h>
+
+#ifdef CONFIG_FS_POSIX_ACL
+#define LUSTRE_POSIX_ACL_MAX_ENTRIES (32)
+#define LUSTRE_POSIX_ACL_MAX_SIZE \
+ (xattr_acl_size(LUSTRE_POSIX_ACL_MAX_ENTRIES))
+#else
+#define LUSTRE_POSIX_ACL_MAX_SIZE 0
+#endif
+
+#endif
__u16 f_num; /* holds fid number. */
};
-#define fid_seq(fid) ((fid)->f_seq)
-#define fid_num(fid) ((fid)->f_num)
-#define fid_wid(fid) ((fid)->f_wid)
+static inline __u32 fid_seq(const struct lu_fid *fid)
+{
+ return fid->f_seq;
+}
+
+static inline __u16 fid_wid(const struct lu_fid *fid)
+{
+ return fid->f_wid;
+}
+
+static inline __u16 fid_num(const struct lu_fid *fid)
+{
+ return fid->f_num;
+}
#define DFID2 "%lu/%u"
#include <linux/obd_class.h>
#include <linux/lustre_net.h>
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include <linux/lustre_ha.h>
#include <linux/rbtree.h>
--- /dev/null
+/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
+ * vim:expandtab:shiftwidth=8:tabstop=8:
+ *
+ * This file is part of Lustre, http://www.lustre.org
+ *
+ * MDS data structures.
+ * See also lustre_idl.h for wire formats of requests.
+ */
+
+#ifndef _LUSTRE_MDC_H
+#define _LUSTRE_MDC_H
+
+#ifdef __KERNEL__
+# include <linux/fs.h>
+# include <linux/dcache.h>
+# ifdef CONFIG_FS_POSIX_ACL
+# include <linux/xattr_acl.h>
+# endif
+#endif
+#include <linux/lustre_handles.h>
+#include <libcfs/kp30.h>
+#include <linux/lustre_idl.h>
+#include <linux/lustre_lib.h>
+#include <linux/lustre_dlm.h>
+#include <linux/lustre_log.h>
+#include <linux/lustre_export.h>
+
+struct ptlrpc_client;
+struct obd_export;
+struct ptlrpc_request;
+struct obd_device;
+
+struct lustre_md {
+ struct mds_body *body;
+ struct lov_stripe_md *lsm;
+#ifdef CONFIG_FS_POSIX_ACL
+ struct posix_acl *posix_acl;
+#endif
+};
+
+struct mdc_op_data {
+ struct ll_fid fid1;
+ struct ll_fid fid2;
+ __u64 mod_time;
+ const char *name;
+ int namelen;
+ __u32 create_mode;
+ __u32 suppgids[2];
+};
+
+/* mdc/mdc_locks.c */
+int it_disposition(struct lookup_intent *it, int flag);
+void it_set_disposition(struct lookup_intent *it, int flag);
+int it_open_error(int phase, struct lookup_intent *it);
+void mdc_set_lock_data(__u64 *lockh, void *data);
+int mdc_change_cbdata(struct obd_export *exp, struct ll_fid *fid,
+ ldlm_iterator_t it, void *data);
+int mdc_intent_lock(struct obd_export *exp,
+ struct mdc_op_data *,
+ void *lmm, int lmmsize,
+ struct lookup_intent *, int,
+ struct ptlrpc_request **reqp,
+ ldlm_blocking_callback cb_blocking, int extra_lock_flags);
+int mdc_enqueue(struct obd_export *exp,
+ int lock_type,
+ struct lookup_intent *it,
+ int lock_mode,
+ struct mdc_op_data *data,
+ struct lustre_handle *lockh,
+ void *lmm,
+ int lmmlen,
+ ldlm_completion_callback cb_completion,
+ ldlm_blocking_callback cb_blocking,
+ void *cb_data, int extra_lock_flags);
+
+/* mdc/mdc_request.c */
+int mdc_init_ea_size(struct obd_export *mdc_exp, struct obd_export *lov_exp);
+
+int mdc_req2lustre_md(struct ptlrpc_request *req, int offset,
+ struct obd_export *exp, struct lustre_md *md);
+void mdc_free_lustre_md(struct obd_export *exp, struct lustre_md *md);
+
+int mdc_getstatus(struct obd_export *exp, struct ll_fid *rootfid);
+int mdc_getattr(struct obd_export *exp, struct ll_fid *fid,
+ obd_valid valid, unsigned int ea_size,
+ struct ptlrpc_request **request);
+int mdc_getattr_name(struct obd_export *exp, struct ll_fid *fid,
+ const char *filename, int namelen, unsigned long valid,
+ unsigned int ea_size, struct ptlrpc_request **request);
+int mdc_setattr(struct obd_export *exp, struct mdc_op_data *data,
+ struct iattr *iattr, void *ea, int ealen, void *ea2, int ea2len,
+ struct ptlrpc_request **request);
+int mdc_setxattr(struct obd_export *exp, struct ll_fid *fid,
+ obd_valid valid, const char *xattr_name,
+ const char *input, int input_size,
+ int output_size, int flags,
+ struct ptlrpc_request **request);
+int mdc_getxattr(struct obd_export *exp, struct ll_fid *fid,
+ obd_valid valid, const char *xattr_name,
+ const char *input, int input_size,
+ int output_size, struct ptlrpc_request **request);
+int mdc_open(struct obd_export *exp, obd_id ino, int type, int flags,
+ struct lov_mds_md *lmm, int lmm_size, struct lustre_handle *fh,
+ struct ptlrpc_request **);
+struct obd_client_handle;
+void mdc_set_open_replay_data(struct obd_client_handle *och,
+ struct ptlrpc_request *open_req);
+void mdc_clear_open_replay_data(struct obd_client_handle *och);
+int mdc_close(struct obd_export *, struct obdo *, struct obd_client_handle *,
+ struct ptlrpc_request **);
+int mdc_readpage(struct obd_export *exp, struct ll_fid *mdc_fid, __u64 offset,
+ struct page *, struct ptlrpc_request **);
+int mdc_create(struct obd_export *exp, struct mdc_op_data *op_data,
+ const void *data, int datalen, int mode, __u32 uid, __u32 gid,
+ __u32 cap_effective, __u64 rdev,struct ptlrpc_request **request);
+int mdc_unlink(struct obd_export *exp, struct mdc_op_data *data,
+ struct ptlrpc_request **request);
+int mdc_link(struct obd_export *exp, struct mdc_op_data *data,
+ struct ptlrpc_request **);
+int mdc_rename(struct obd_export *exp, struct mdc_op_data *data,
+ const char *old, int oldlen, const char *new, int newlen,
+ struct ptlrpc_request **request);
+int mdc_sync(struct obd_export *exp, struct ll_fid *fid,
+ struct ptlrpc_request **);
+int mdc_create_client(struct obd_uuid uuid, struct ptlrpc_client *cl);
+
+/* Store the generation of a newly-created inode in |req| for replay. */
+void mdc_store_inode_generation(struct ptlrpc_request *req, int reqoff,
+ int repoff);
+int mdc_llog_process(struct obd_export *, char *logname, llog_cb_t, void *data);
+int mdc_done_writing(struct obd_export *exp, struct obdo *);
+
+static inline void mdc_pack_fid(struct ll_fid *fid, obd_id ino, __u32 gen,
+ int type)
+{
+ fid->id = ino;
+ fid->generation = gen;
+ fid->f_type = type;
+}
+
+#endif
#ifdef __KERNEL__
# include <linux/fs.h>
# include <linux/dcache.h>
-# ifdef CONFIG_FS_POSIX_ACL
-# include <linux/xattr_acl.h>
-# endif
#endif
#include <linux/lustre_handles.h>
#include <libcfs/kp30.h>
#include <linux/lustre_log.h>
#include <linux/lustre_export.h>
-struct ldlm_lock_desc;
struct mds_obd;
-struct ptlrpc_connection;
-struct ptlrpc_client;
-struct obd_export;
struct ptlrpc_request;
struct obd_device;
-struct ll_file_data;
-
-struct lustre_md {
- struct mds_body *body;
- struct lov_stripe_md *lsm;
-#ifdef CONFIG_FS_POSIX_ACL
- struct posix_acl *posix_acl;
-#endif
-};
-
-struct mdc_op_data {
- struct ll_fid fid1;
- struct ll_fid fid2;
- __u64 mod_time;
- const char *name;
- int namelen;
- __u32 create_mode;
- __u32 suppgids[2];
-};
struct mds_update_record {
__u32 ur_opcode;
struct dentry *mfd_dentry;
};
-/* ACL */
-#ifdef CONFIG_FS_POSIX_ACL
-#define LUSTRE_POSIX_ACL_MAX_ENTRIES (32)
-#define LUSTRE_POSIX_ACL_MAX_SIZE \
- (xattr_acl_size(LUSTRE_POSIX_ACL_MAX_ENTRIES))
-#else
-#define LUSTRE_POSIX_ACL_MAX_SIZE 0
-#endif
-
/* mds/mds_reint.c */
int mds_reint_rec(struct mds_update_record *r, int offset,
struct ptlrpc_request *req, struct lustre_handle *);
int mds_fs_cleanup(struct obd_device *obddev);
#endif
-/* mds/mds_lov.c */
-
-/* mdc/mdc_locks.c */
-int it_disposition(struct lookup_intent *it, int flag);
-void it_set_disposition(struct lookup_intent *it, int flag);
-int it_open_error(int phase, struct lookup_intent *it);
-void mdc_set_lock_data(__u64 *lockh, void *data);
-int mdc_change_cbdata(struct obd_export *exp, struct ll_fid *fid,
- ldlm_iterator_t it, void *data);
-int mdc_intent_lock(struct obd_export *exp,
- struct mdc_op_data *,
- void *lmm, int lmmsize,
- struct lookup_intent *, int,
- struct ptlrpc_request **reqp,
- ldlm_blocking_callback cb_blocking, int extra_lock_flags);
-int mdc_enqueue(struct obd_export *exp,
- int lock_type,
- struct lookup_intent *it,
- int lock_mode,
- struct mdc_op_data *data,
- struct lustre_handle *lockh,
- void *lmm,
- int lmmlen,
- ldlm_completion_callback cb_completion,
- ldlm_blocking_callback cb_blocking,
- void *cb_data, int extra_lock_flags);
-
-/* mdc/mdc_request.c */
-int mdc_init_ea_size(struct obd_export *mdc_exp, struct obd_export *lov_exp);
-
-int mdc_req2lustre_md(struct ptlrpc_request *req, int offset,
- struct obd_export *exp, struct lustre_md *md);
-void mdc_free_lustre_md(struct obd_export *exp, struct lustre_md *md);
-
-int mdc_getstatus(struct obd_export *exp, struct ll_fid *rootfid);
-int mdc_getattr(struct obd_export *exp, struct ll_fid *fid,
- obd_valid valid, unsigned int ea_size,
- struct ptlrpc_request **request);
-int mdc_getattr_name(struct obd_export *exp, struct ll_fid *fid,
- const char *filename, int namelen, unsigned long valid,
- unsigned int ea_size, struct ptlrpc_request **request);
-int mdc_setattr(struct obd_export *exp, struct mdc_op_data *data,
- struct iattr *iattr, void *ea, int ealen, void *ea2, int ea2len,
- struct ptlrpc_request **request);
-int mdc_setxattr(struct obd_export *exp, struct ll_fid *fid,
- obd_valid valid, const char *xattr_name,
- const char *input, int input_size,
- int output_size, int flags,
- struct ptlrpc_request **request);
-int mdc_getxattr(struct obd_export *exp, struct ll_fid *fid,
- obd_valid valid, const char *xattr_name,
- const char *input, int input_size,
- int output_size, struct ptlrpc_request **request);
-int mdc_open(struct obd_export *exp, obd_id ino, int type, int flags,
- struct lov_mds_md *lmm, int lmm_size, struct lustre_handle *fh,
- struct ptlrpc_request **);
-struct obd_client_handle;
-void mdc_set_open_replay_data(struct obd_client_handle *och,
- struct ptlrpc_request *open_req);
-void mdc_clear_open_replay_data(struct obd_client_handle *och);
-int mdc_close(struct obd_export *, struct obdo *, struct obd_client_handle *,
- struct ptlrpc_request **);
-int mdc_readpage(struct obd_export *exp, struct ll_fid *mdc_fid, __u64 offset,
- struct page *, struct ptlrpc_request **);
-int mdc_create(struct obd_export *exp, struct mdc_op_data *op_data,
- const void *data, int datalen, int mode, __u32 uid, __u32 gid,
- __u32 cap_effective, __u64 rdev,struct ptlrpc_request **request);
-int mdc_unlink(struct obd_export *exp, struct mdc_op_data *data,
- struct ptlrpc_request **request);
-int mdc_link(struct obd_export *exp, struct mdc_op_data *data,
- struct ptlrpc_request **);
-int mdc_rename(struct obd_export *exp, struct mdc_op_data *data,
- const char *old, int oldlen, const char *new, int newlen,
- struct ptlrpc_request **request);
-int mdc_sync(struct obd_export *exp, struct ll_fid *fid,
- struct ptlrpc_request **);
-int mdc_create_client(struct obd_uuid uuid, struct ptlrpc_client *cl);
-
-/* Store the generation of a newly-created inode in |req| for replay. */
-void mdc_store_inode_generation(struct ptlrpc_request *req, int reqoff,
- int repoff);
-int mdc_llog_process(struct obd_export *, char *logname, llog_cb_t, void *data);
-int mdc_done_writing(struct obd_export *exp, struct obdo *);
-
-static inline void mdc_pack_fid(struct ll_fid *fid, obd_id ino, __u32 gen,
- int type)
-{
- fid->id = ino;
- fid->generation = gen;
- fid->f_type = type;
-}
-
/* ioctls for trying requests */
#define IOC_REQUEST_TYPE 'f'
#define IOC_REQUEST_MIN_NR 30
}
#endif
-static inline int ll_fid2str(char *str, __u64 id, __u32 generation)
-{
- return sprintf(str, "%llx:%08x", (unsigned long long)id, generation);
-}
-
#endif
#include <liblustre.h>
#include <linux/obd.h>
#include <linux/obd_class.h>
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include <linux/lustre_lite.h>
#include <sys/types.h>
#include <linux/obd_class.h>
#include <linux/lustre_lib.h>
#include <linux/lustre_idl.h>
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include <linux/lustre_lite.h>
#include <linux/lustre_dlm.h>
#include "llite_internal.h"
#define DEBUG_SUBSYSTEM S_LLITE
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include <linux/lustre_lite.h>
#include "llite_internal.h"
*
* Lustre Light Super operations
*
- * Copyright (c) 2002-2005 Cluster File Systems, Inc.
+ * Copyright (c) 2006 Cluster File Systems, Inc.
*
* This file is part of Lustre, http://www.lustre.org.
*
#define DEBUG_SUBSYSTEM S_LLITE
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include <linux/lustre_lite.h>
#include "llite_internal.h"
#include <linux/lustre_compat25.h>
#define DEBUG_SUBSYSTEM S_LLITE
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include <linux/lustre_lite.h>
#include "llite_internal.h"
#include <linux/lustre_compat25.h>
#define DEBUG_SUBSYSTEM S_LLITE
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include <linux/lustre_lite.h>
#include "llite_internal.h"
#include <linux/lustre_compat25.h>
#define DEBUG_SUBSYSTEM S_LLITE
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include <linux/lustre_lite.h>
#include "llite_internal.h"
#include <linux/lustre_compat25.h>
#include <linux/lustre_lite.h>
#include <linux/lustre_dlm.h>
#include <linux/lustre_version.h>
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include "llite_internal.h"
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
void mdc_pack_req_body(struct ptlrpc_request *req, int offset,
__u64 valid, struct ll_fid *fid, int ea_size);
void mdc_pack_rep_body(struct ptlrpc_request *);
#endif
#include <linux/lustre_idl.h>
#include <linux/lustre_net.h>
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include "mdc_internal.h"
#ifndef __KERNEL__
#endif
#include <linux/obd_class.h>
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
+#include <linux/lustre_acl.h>
#include <linux/lustre_dlm.h>
#include <linux/lprocfs_status.h>
#include "mdc_internal.h"
#endif
#include <linux/obd_class.h>
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
#include "mdc_internal.h"
/* mdc_setattr does its own semaphore handling */
#endif
#include <linux/obd_class.h>
-#include <linux/lustre_mds.h>
+#include <linux/lustre_mdc.h>
+#include <linux/lustre_acl.h>
#include <linux/lustre_dlm.h>
#include <linux/lprocfs_status.h>
#include "mdc_internal.h"
#include <linux/module.h>
#include <linux/lustre_mds.h>
+#include <linux/lustre_acl.h>
#include <linux/lustre_dlm.h>
#include <linux/init.h>
#include <linux/obd_class.h>
oa->o_id = filp->f_dentry->d_inode->i_ino;
oa->o_generation = filp->f_dentry->d_inode->i_generation;
- namelen = ll_fid2str(fidname, oa->o_id, oa->o_generation);
+ namelen = mds_fid2str(fidname, oa->o_id, oa->o_generation);
down(&parent_inode->i_sem);
new_child = lookup_one_len(fidname, mds->mds_objects_dir, namelen);
ucred.luc_cap = current->cap_effective | CAP_SYS_RESOURCE;
push_ctxt(&saved, &obd->obd_lvfs_ctxt, &ucred);
- namelen = ll_fid2str(fidname, oa->o_id, oa->o_generation);
+ namelen = mds_fid2str(fidname, oa->o_id, oa->o_generation);
down(&parent_inode->i_sem);
de = lookup_one_len(fidname, mds->mds_objects_dir, namelen);
int mds_setxattr(struct ptlrpc_request *req);
int mds_getxattr(struct ptlrpc_request *req);
+static inline int mds_fid2str(char *str, __u64 id, __u32 generation)
+{
+ return sprintf(str, "%llx:%08x", (unsigned long long)id, generation);
+}
+
#endif /* _MDS_INTERNAL_H */
void *handle = NULL;
ENTRY;
- fidlen = ll_fid2str(fidname, fid->id, fid->generation);
+ fidlen = mds_fid2str(fidname, fid->id, fid->generation);
dchild = ll_lookup_one_len(fidname, mds->mds_pending_dir, fidlen);
if (IS_ERR(dchild)) {
rc = PTR_ERR(dchild);
reply_body = lustre_msg_buf(req->rq_repmsg, 0,
sizeof(*reply_body));
- fidlen = ll_fid2str(fidname, inode->i_ino, inode->i_generation);
+ fidlen = mds_fid2str(fidname, inode->i_ino, inode->i_generation);
CDEBUG(D_INODE, "inode %p ino %s nlink %d orphan %d\n", inode, fidname,
inode->i_nlink, mds_orphan_open_count(inode));
#endif
LASSERT(down_trylock(&pending_dir->i_sem) != 0);
- fidlen = ll_fid2str(fidname, inode->i_ino, inode->i_generation);
+ fidlen = mds_fid2str(fidname, inode->i_ino, inode->i_generation);
CDEBUG(D_INODE, "pending destroy of %dx open %d linked %s %s = %s\n",
mds_orphan_open_count(inode), inode->i_nlink,
endif
MOSTLYCLEANFILES := @MOSTLYCLEANFILES@
-DIST_SOURCES := $(mdt-objs:%.o=%.c) #mdt.h
+DIST_SOURCES := $(mdt-objs:%.o=%.c) #mdt_internal.h
/* struct mds_client_data */
#include "../mds/mds_internal.h"
-#include "mdt.h"
+#include "mdt_internal.h"
/*
* Initialized in mdt_mod_init().
struct ldlm_lock **lockp, void *req_cookie,
ldlm_mode_t mode, int flags, void *data)
{
- return ELDLM_LOCK_ABORTED;
+ ENTRY;
+ RETURN(ELDLM_LOCK_ABORTED);
}
struct ptlrpc_service *ptlrpc_init_svc_conf(struct ptlrpc_service_conf *c,
/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
* vim:expandtab:shiftwidth=8:tabstop=8:
+ *
+ * lustre/mds/handler.c
+ * Lustre Metadata Target (mdt) request handler
+ *
+ * Copyright (c) 2006 Cluster File Systems, Inc.
+ * Author: Peter Braam <braam@clusterfs.com>
+ * Author: Andreas Dilger <adilger@clusterfs.com>
+ * Author: Phil Schwan <phil@clusterfs.com>
+ * Author: Mike Shaver <shaver@clusterfs.com>
+ * Author: Nikita Danilov <nikita@clusterfs.com>
+ *
+ * This file is part of the Lustre file system, http://www.lustre.org
+ * Lustre is a trademark of Cluster File Systems, Inc.
+ *
+ * You may have signed or agreed to another license before downloading
+ * this software. If so, you are bound by the terms and conditions
+ * of that agreement, and the following does not apply to you. See the
+ * LICENSE file included with this distribution for more information.
+ *
+ * If you did not agree to a different license, then this copy of Lustre
+ * is open source software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * In either case, Lustre is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * license text for more details.
*/
-#ifndef _MDT_H
-#define _MDT_H
+#ifndef _MDT_INTERNAL_H
+#define _MDT_INTERNAL_H
#if defined(__KERNEL__)
struct mgs_target_info *mti)
{
struct llog_handle *llh = NULL;
- char *cliname, *mdcname, *lovname, *nodeuuid, *mdcuuid;
- int rc, i, first_log = 0;
+// char *mdcname, **nodeuuid, *mdcuuid;
+ char *cliname, *lovname;
+ int rc, first_log = 0;
+// int i;
ENTRY;
CDEBUG(D_MGS, "writing new mdt %s\n", mti->mti_svname);
// mgs_write_log_mdc(...);
//END PROTO
-
+ RETURN(rc);
}