/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
* vim:expandtab:shiftwidth=8:tabstop=8:
*
- * The daemon that causes completed but not committed transactions
+ * The daemon that causes completed but not committed transactions
* on the MDS to be flushed periodically when they are committed.
- * A gratuitous getattr RPC is made to the MDS to discover the
- * last committed record.
+ * A gratuitous getattr RPC is made to the MDS to discover the
+ * last committed record.
*
* Lustre High Availability Daemon
*
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/stat.h>
-#include <linux/locks.h>
+#include <linux/sched.h>
+#include <linux/smp_lock.h>
#include <linux/kmod.h>
#include <linux/quotaops.h>
#include <asm/unistd.h>
static int ll_commitcbd_check_event(struct ll_sb_info *sbi)
{
- int rc = 0;
+ int rc = 0;
ENTRY;
- spin_lock(&sbi->ll_commitcbd_lock);
- if (sbi->ll_commitcbd_flags & LL_COMMITCBD_STOPPING) {
+ spin_lock(&sbi->ll_commitcbd_lock);
+ if (sbi->ll_commitcbd_flags & LL_COMMITCBD_STOPPING)
GOTO(out, rc = 1);
- }
+ EXIT;
out:
spin_unlock(&sbi->ll_commitcbd_lock);
- RETURN(rc);
+ return rc;
}
static int ll_commitcbd_main(void *arg)
{
struct ll_sb_info *sbi = (struct ll_sb_info *)arg;
-
+ unsigned long flags;
ENTRY;
lock_kernel();
daemonize();
- spin_lock_irq(¤t->sigmask_lock);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
+ spin_lock_irqsave(¤t->sigmask_lock, flags);
sigfillset(¤t->blocked);
- recalc_sigpending(current);
- spin_unlock_irq(¤t->sigmask_lock);
+ our_recalc_sigpending(current);
+ spin_unlock_irqrestore(¤t->sigmask_lock, flags);
+#else
+ sigfillset(¤t->blocked);
+ our_recalc_sigpending(current);
+#endif
sprintf(current->comm, "lustre_commitcbd");
+ unlock_kernel();
/* Record that the thread is running */
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
sbi->ll_commitcbd_waketime = CURRENT_TIME;
+#else
+ sbi->ll_commitcbd_waketime = CURRENT_TIME.tv_sec;
+#endif
sbi->ll_commitcbd_timeout = 10 * HZ;
sbi->ll_commitcbd_thread = current;
sbi->ll_commitcbd_flags = LL_COMMITCBD_RUNNING;
/* And now, loop forever on requests */
while (1) {
- wait_event(sbi->ll_commitcbd_waitq,
+ wait_event(sbi->ll_commitcbd_waitq,
ll_commitcbd_check_event(sbi));
spin_lock(&sbi->ll_commitcbd_lock);
if (sbi->ll_commitcbd_flags & LL_COMMITCBD_STOPPING) {
spin_unlock(&sbi->ll_commitcbd_lock);
- CERROR("lustre_commitd quitting\n");
+ CERROR("lustre_commitd quitting\n");
EXIT;
break;
}
schedule_timeout(sbi->ll_commitcbd_timeout);
- CERROR("commit callback daemon woken up - FIXME\n");
+ CERROR("commit callback daemon woken up - FIXME\n");
spin_unlock(&sbi->ll_commitcbd_lock);
}
CERROR("cannot start thread\n");
RETURN(rc);
}
- wait_event(sbi->ll_commitcbd_ctl_waitq,
+ wait_event(sbi->ll_commitcbd_ctl_waitq,
sbi->ll_commitcbd_flags & LL_COMMITCBD_RUNNING);
RETURN(0);
}