is interrupted on the client). r=robert.
struct file *mds_lov_objid_filp;
unsigned long *mds_client_bitmap;
struct semaphore mds_orphan_recovery_sem;
struct file *mds_lov_objid_filp;
unsigned long *mds_client_bitmap;
struct semaphore mds_orphan_recovery_sem;
+
+ atomic_t mds_open_count;
spin_lock_init(&mds->mds_transno_lock);
mds->mds_max_mdsize = sizeof(struct lov_mds_md);
mds->mds_max_cookiesize = sizeof(struct llog_cookie);
spin_lock_init(&mds->mds_transno_lock);
mds->mds_max_mdsize = sizeof(struct lov_mds_md);
mds->mds_max_cookiesize = sizeof(struct llog_cookie);
+ atomic_set(&mds->mds_open_count, 0);
obd->obd_namespace = ldlm_namespace_new("mds_server",
LDLM_NAMESPACE_SERVER);
obd->obd_namespace = ldlm_namespace_new("mds_server",
LDLM_NAMESPACE_SERVER);
return snprintf(page, count, "%s\n",obd->u.mds.mds_vfsmnt->mnt_devname);
}
return snprintf(page, count, "%s\n",obd->u.mds.mds_vfsmnt->mnt_devname);
}
+static int lprocfs_mds_rd_filesopen(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+{
+ struct obd_device *obd = data;
+ LASSERT(obd != NULL);
+ *eof = 1;
+
+ return snprintf(page, count, "%d\n",
+ atomic_read(&obd->u.mds.mds_open_count));
+}
+
static int lprocfs_mds_rd_recovery_status(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
static int lprocfs_mds_rd_recovery_status(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
{ "fstype", lprocfs_rd_fstype, 0, 0 },
{ "filestotal", lprocfs_rd_filestotal, 0, 0 },
{ "filesfree", lprocfs_rd_filesfree, 0, 0 },
{ "fstype", lprocfs_rd_fstype, 0, 0 },
{ "filestotal", lprocfs_rd_filestotal, 0, 0 },
{ "filesfree", lprocfs_rd_filesfree, 0, 0 },
+ { "filesopen", lprocfs_mds_rd_filesopen, 0, 0 },
//{ "filegroups", lprocfs_rd_filegroups, 0, 0 },
{ "mntdev", lprocfs_mds_rd_mntdev, 0, 0 },
{ "recovery_status", lprocfs_mds_rd_recovery_status, 0, 0 },
//{ "filegroups", lprocfs_rd_filegroups, 0, 0 },
{ "mntdev", lprocfs_mds_rd_mntdev, 0, 0 },
{ "recovery_status", lprocfs_mds_rd_recovery_status, 0, 0 },
else
ldlm_put_lock_into_req(req, &parent_lockh, parent_mode);
}
else
ldlm_put_lock_into_req(req, &parent_lockh, parent_mode);
}
+ if (rc == 0)
+ atomic_inc(&mds->mds_open_count);
mds_mfd_destroy(mfd);
cleanup:
mds_mfd_destroy(mfd);
cleanup:
+ atomic_dec(&mds->mds_open_count);
if (req) {
rc = mds_finish_transno(mds, pending_dir, handle, req, rc, 0);
} else if (handle) {
if (req) {
rc = mds_finish_transno(mds, pending_dir, handle, req, rc, 0);
} else if (handle) {
--- /dev/null
+#!/bin/sh
+LUSTRE=`dirname $0`/..
+exec >> /tmp/recovery-`hostname`.log
+exec 2>&1
+
+$LUSTRE/utils/lconf --recover --verbose --tgt_uuid $2 --client_uuid $3 --conn_uuid $4 $LUSTRE/tests/local.xml