From owner-freebsd-bugs@FreeBSD.ORG Fri Jul 4 00:50:59 2014 Return-Path: Delivered-To: freebsd-bugs@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 856353C8 for ; Fri, 4 Jul 2014 00:50:59 +0000 (UTC) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2001:1900:2254:206a::16:76]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6CE4D27D4 for ; Fri, 4 Jul 2014 00:50:59 +0000 (UTC) Received: from bugs.freebsd.org ([127.0.1.118]) by kenobi.freebsd.org (8.14.8/8.14.8) with ESMTP id s640oxrk090135 for ; Fri, 4 Jul 2014 01:50:59 +0100 (BST) (envelope-from bugzilla-noreply@freebsd.org) From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 191593] New: [fcntl] F_SETFL returns EDEADLK when it shouldn't - only F_SETFLW and waiting should return EDEADLK Date: Fri, 04 Jul 2014 00:50:59 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Base System X-Bugzilla-Component: kern X-Bugzilla-Version: 11.0-CURRENT X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Only Me X-Bugzilla-Who: adrian@freebsd.org X-Bugzilla-Status: Needs Triage X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: freebsd-bugs@FreeBSD.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version rep_platform op_sys bug_status bug_severity priority component assigned_to reporter Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Jul 2014 00:50:59 -0000 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191593 Bug ID: 191593 Summary: [fcntl] F_SETFL returns EDEADLK when it shouldn't - only F_SETFLW and waiting should return EDEADLK Product: Base System Version: 11.0-CURRENT Hardware: Any OS: Any Status: Needs Triage Severity: Affects Only Me Priority: --- Component: kern Assignee: freebsd-bugs@FreeBSD.org Reporter: adrian@freebsd.org Hi! I've seen sqlite3 crap out due to "disk IO error". It looks like the F_SETFL path is returning EDEADLK when it shouldn't be - only the "wait" version of this should be. The kernel code looks to be: lf_setlock() -> lf_add_outgoing() -> lf_add_edge() -> graph_add_edge() -> EDEADLK .. and lf_setlock() will return an error from lf_add_outgoing() without checking if it's (a) EDEADLK, and (b) whether we're going to sleep or not. So, sqlite3 trips up on this. I'm sure other things do. What should the correct thing be? It looks like EWOULDBLOCK is the correct value to return for F_SETFL failing, not EDEADLK. What do those-who-know-POSIX-standards-better-than-I think? Thanks! -- You are receiving this mail because: You are the assignee for the bug.