On Tue, Feb 16, 2016 at 06:15:56PM -0500, Mike Marshall wrote: > Here's what I see: > > orangefs_create > service_operation > wait_for_matching_downcall purges op and returns -EAGAIN > orangefs_clean_up_interrupted_operation > if (EAGAIN) > ... > goto retry_servicing > wait_for_matching_downcall returns 0 > service_operation returns 0 > orangefs_create has good return value from service_operation > > op->khandle: 00000000-0000-0000-0000-000000000000 > op->fs_id: 0 > > subsequent getattr on bogus object fails orangefs_create on EINVAL. > > seems like the second time around, wait_for_matching_downcall > must have seen op_state_serviced, but I don't see how yet... I strongly suspect that this is what's missing. Could you check if it helps? diff --git a/fs/orangefs/waitqueue.c b/fs/orangefs/waitqueue.c index 2539813..36eedd6 100644 --- a/fs/orangefs/waitqueue.c +++ b/fs/orangefs/waitqueue.c @@ -244,6 +244,7 @@ static void orangefs_clean_up_interrupted_operation(struct orangefs_kernel_op_s gossip_err("%s: can't get here.\n", __func__); spin_unlock(&op->lock); } + reinit_completion(&op->waitq); } /* -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html