-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
static void unlock_mntput(struct vfsmount *mnt)
{
- if (kernel_locked()) {
- cfs_unlock_kernel();
- mntput(mnt);
- cfs_lock_kernel();
- } else {
- mntput(mnt);
- }
+#ifdef HAVE_KERNEL_LOCKED
+ /* for kernel < 2.6.37 */
+ if (kernel_locked()) {
+ unlock_kernel();
+ mntput(mnt);
+ lock_kernel();
+ } else {
+ mntput(mnt);
+ }
+#else
+ mntput(mnt);
+#endif
}
static int lustre_put_lsi(struct super_block *sb);
obd = class_name2obd(mgcname);
if (obd && !obd->obd_stopping) {
- rc = obd_set_info_async(obd->obd_self_export,
+ rc = obd_set_info_async(NULL, obd->obd_self_export,
strlen(KEY_MGSSEC), KEY_MGSSEC,
strlen(mgssec), mgssec, NULL);
if (rc)
int vallen = sizeof(*data);
__u32 *flags = &lsi->lsi_lmd->lmd_flags;
- rc = obd_get_info(obd->obd_self_export,
+ rc = obd_get_info(NULL, obd->obd_self_export,
strlen(KEY_CONN_DATA), KEY_CONN_DATA,
&vallen, data, NULL);
LASSERT(rc == 0);
if at all possible. */
recov_bk++;
CDEBUG(D_MOUNT, "%s: Set MGC reconnect %d\n", mgcname,recov_bk);
- rc = obd_set_info_async(obd->obd_self_export,
+ rc = obd_set_info_async(NULL, obd->obd_self_export,
sizeof(KEY_INIT_RECOV_BACKUP),
KEY_INIT_RECOV_BACKUP,
sizeof(recov_bk), &recov_bk, NULL);
GOTO(out_free, rc = -ENOTCONN);
}
- rc = obd_set_info_async(obd->obd_self_export,
+ rc = obd_set_info_async(NULL, obd->obd_self_export,
strlen(KEY_MGSSEC), KEY_MGSSEC,
strlen(mgssec), mgssec, NULL);
if (rc)
/* Try all connections, but only once. */
recov_bk = 1;
- rc = obd_set_info_async(obd->obd_self_export,
+ rc = obd_set_info_async(NULL, obd->obd_self_export,
sizeof(KEY_INIT_RECOV_BACKUP),
KEY_INIT_RECOV_BACKUP,
sizeof(recov_bk), &recov_bk, NULL);
CDEBUG(D_MOUNT, "Set mgc disk for %s\n", lsi->lsi_lmd->lmd_dev);
/* cl_mgc_sem in mgc insures we sleep if the mgc_fs is busy */
- rc = obd_set_info_async(mgc->obd_self_export,
+ rc = obd_set_info_async(NULL, mgc->obd_self_export,
sizeof(KEY_SET_FS), KEY_SET_FS,
sizeof(*sb), sb, NULL);
if (rc) {
CDEBUG(D_MOUNT, "Unassign mgc disk\n");
- rc = obd_set_info_async(mgc->obd_self_export,
+ rc = obd_set_info_async(NULL, mgc->obd_self_export,
sizeof(KEY_CLEAR_FS), KEY_CLEAR_FS,
0, NULL, NULL);
RETURN(rc);
/* Register the target */
/* FIXME use mgc_process_config instead */
- rc = obd_set_info_async(mgc->u.cli.cl_mgc_mgsexp,
+ rc = obd_set_info_async(NULL, mgc->u.cli.cl_mgc_mgsexp,
sizeof(KEY_REGISTER_TARGET), KEY_REGISTER_TARGET,
sizeof(*mti), mti, NULL);
if (rc) {
mti->mti_flags |= LDD_F_OPC_READY;
/* FIXME use mgc_process_config instead */
- rc = obd_set_info_async(mgc->u.cli.cl_mgc_mgsexp,
+ rc = obd_set_info_async(NULL, mgc->u.cli.cl_mgc_mgsexp,
sizeof(KEY_REGISTER_TARGET),
KEY_REGISTER_TARGET,
sizeof(*mti), mti, NULL);
struct lustre_disk_data *ldd;
struct lustre_mount_data *lmd = lsi->lsi_lmd;
struct vfsmount *mnt;
+ struct file_system_type *type;
char *options = NULL;
unsigned long page, s_flags;
struct page *__page;
/* Pre-mount ldiskfs to read the MOUNT_DATA_FILE */
CDEBUG(D_MOUNT, "Pre-mount ldiskfs %s\n", lmd->lmd_dev);
- mnt = ll_kern_mount("ldiskfs", s_flags, lmd->lmd_dev, (void *)options);
+ type = get_fs_type("ldiskfs");
+ if (!type) {
+ CERROR("premount failed: cannot find ldiskfs module\n");
+ GOTO(out_free, rc = -ENODEV);
+ }
+ mnt = vfs_kern_mount(type, s_flags, lmd->lmd_dev, (void *)options);
+ cfs_module_put(type->owner);
if (IS_ERR(mnt)) {
rc = PTR_ERR(mnt);
CERROR("premount %s:%#lx ldiskfs failed: %d "
CDEBUG(D_MOUNT, "kern_mount: %s %s %s\n",
MT_STR(ldd), lmd->lmd_dev, options);
- mnt = ll_kern_mount(MT_STR(ldd), s_flags, lmd->lmd_dev,
- (void *)options);
+ type = get_fs_type(MT_STR(ldd));
+ if (!type) {
+ CERROR("get_fs_type failed\n");
+ GOTO(out_free, rc = -ENODEV);
+ }
+ mnt = vfs_kern_mount(type, s_flags, lmd->lmd_dev, (void *)options);
+ cfs_module_put(type->owner);
if (IS_ERR(mnt)) {
rc = PTR_ERR(mnt);
- CERROR("ll_kern_mount failed: rc = %d\n", rc);
+ CERROR("vfs_kern_mount failed: rc = %d\n", rc);
GOTO(out_free, rc);
}
(mnt_get_count(mnt) == 1),
cfs_time_seconds(3),
rc);
- cfs_block_sigs(blocked);
+ cfs_restore_sigs(blocked);
if (rc < 0) {
LCONSOLE_EMERG("Danger: interrupted umount %s with "
"%d refs!\n", mnt->mnt_devname,
should have put it on a different device. */
if (IS_MGS(lsi->lsi_ldd)) {
/* if MDS start with --nomgs, don't stop MGS then */
- if (!(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS)) {
- char *logname;
-
- OBD_ALLOC(logname, MGS_PARAM_MAXLEN);
- if (!logname) {
- LCONSOLE_WARN("Stopping mgs failed %d, please "
- "try again.", -ENOMEM);
- return;
- }
- strcpy(logname, lsi->lsi_ldd->ldd_fsname);
- strcat(logname, "-params");
- /* tell the mgc to drop parameter config log */
- lustre_end_log(sb, logname, NULL);
- OBD_FREE(logname, MGS_PARAM_MAXLEN);
-
+ if (!(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS))
server_stop_mgs(sb);
- }
}
/* Clean the mgc and sb */
sb->s_blocksize = 4096;
sb->s_blocksize_bits = log2(sb->s_blocksize);
sb->s_magic = LUSTRE_SUPER_MAGIC;
- sb->s_maxbytes = 0; //PAGE_CACHE_MAXBYTES;
+ sb->s_maxbytes = 0; /* we don't allow file IO on server mountpoints */
sb->s_flags |= MS_RDONLY;
sb->s_op = &server_ops;
Client will not finish until all servers are connected.
Note - MGS-only server does NOT get a client, since there is no
lustre fs associated - the MGS is for all lustre fs's */
- } else if (IS_MGS(lsi->lsi_ldd) &&
- !(lsi->lsi_lmd->lmd_flags & LMD_FLG_NOMGS)){
- struct config_llog_instance cfg;
- char *logname;
-
- OBD_ALLOC(logname, MGS_PARAM_MAXLEN);
- if (logname == NULL)
- GOTO(out_mnt, rc = -ENOMEM);
- strcpy(logname, lsi->lsi_ldd->ldd_fsname);
- strcat(logname, "-params");
-
- memset(&cfg, 0, sizeof(cfg));
- rc = lustre_process_log(sb, logname, &cfg);
- OBD_FREE(logname, MGS_PARAM_MAXLEN);
- if (rc) {
- CERROR("failed to process parameters %s: %d\n",
- logname, rc);
- GOTO(out_mnt, rc);
- }
}
rc = server_fill_super_common(sb);
} else if (strncmp(s1, "nomgs", 5) == 0) {
lmd->lmd_flags |= LMD_FLG_NOMGS;
clear++;
+ } else if (strncmp(s1, "noscrub", 7) == 0) {
+ lmd->lmd_flags |= LMD_FLG_NOSCRUB;
+ clear++;
} else if (strncmp(s1, "writeconf", 9) == 0) {
lmd->lmd_flags |= LMD_FLG_WRITECONF;
clear++;