case PTL_OK:
thread->t_flags |= SVC_EVENT;
GOTO(out, rc = 1);
-
+
case PTL_EQ_EMPTY:
GOTO(out, rc = 0);
-
+
default:
CERROR("BUG: PtlEQGet returned %d\n", rc);
LBUG();
}
CDEBUG(D_RPCTRACE, "Handling RPC pid:xid:nid:opc %d:"
- LPX64":%x:%d\n",
- NTOH__u32(request->rq_reqmsg->status),
+ LPX64":%x:%d\n",
+ NTOH__u32(request->rq_reqmsg->status),
request->rq_xid,
event->initiator.nid,
NTOH__u32(request->rq_reqmsg->opc));
return rc;
}
+/* Don't use daemonize, it removes fs struct from new thread (bug 418) */
+static void ptlrpc_daemonize(void)
+{
+ exit_mm(current);
+
+ current->session = 1;
+ current->pgrp = 1;
+ current->tty = NULL;
+
+ exit_files(current);
+}
+
static int ptlrpc_main(void *arg)
{
struct ptlrpc_svc_data *data = (struct ptlrpc_svc_data *)arg;
ENTRY;
lock_kernel();
- daemonize();
+ ptlrpc_daemonize();
+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
sigfillset(¤t->blocked);
recalc_sigpending();
#endif
#ifdef __arch_um__
- sprintf(current->comm, "%s|%d",
- data->name, current->thread.extern_pid);
+ sprintf(current->comm, "%s|%d", data->name,current->thread.extern_pid);
#else
strcpy(current->comm, data->name);
#endif
list_add(&thread->t_link, &svc->srv_threads);
spin_unlock(&svc->srv_lock);
- /* XXX should we really be cloning open file handles here? */
- rc = kernel_thread(ptlrpc_main, (void *) &d,
- CLONE_VM | CLONE_FS | CLONE_FILES);
+ rc = kernel_thread(ptlrpc_main, (void *) &d, CLONE_VM | CLONE_FILES);
if (rc < 0) {
CERROR("cannot start thread\n");
OBD_FREE(thread, sizeof(*thread));