Take a look at this: static unsigned int gsc_m2m_poll(struct file *file, struct poll_table_struct *wait) { struct gsc_ctx *ctx = fh_to_ctx(file->private_data); struct gsc_dev *gsc = ctx->gsc_dev; int ret; if (mutex_lock_interruptible(&gsc->lock)) return -ERESTARTSYS; ret = v4l2_m2m_poll(file, ctx->m2m_ctx, wait); mutex_unlock(&gsc->lock); return ret; } a) ->poll() should not return -E...; callers expect just a bitmap of POLL... values. b) sure, it's nice that if this thing hangs, we'll be able to kill it. However, if one's ->poll() can hang indefinitely, it means bad things for poll(2), select(2), etc. semantics. What the hell had been intended there? c) a bunch of v4l2_m2m_poll() callers are also taking some kind of mutex; AFAICS, all of those appear bogus (the rest of them do not play wiht ERESTARTSYS, just plain mutex_lock() for those). What's going on there? -- 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