Re: Regression, bisected: sqlite locking failure on nfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Nov 1, 2010, at 1:58 PM, Nick Bowler wrote:

> After installing 2.6.37-rc1, attempting to use sqlite in any capacity on
> NFS gives a locking error:
> 
>  % echo 'select * from blah;' | sqlite3 blah.sqlite
>  Error: near line 1: database is locked
> 
>  % echo 'create table blargh(INT);' | sqlite3 blargh.sqlite
>  Error: near line 1: database is locked
> 
> The result is that a lot of high-profile applications which make use of
> sqlite fail mysteriously.  Bisection reveals the following, and
> reverting the implicated commit solves the issue:

Nick, thanks for the report.  Is 2.6.37-rc1 running on your clients or on your server?  Does anything interesting appear in the kernel log when your test case fails?

> 9247685088398cf21bcb513bd2832b4cd42516c4 is the first bad commit
> commit 9247685088398cf21bcb513bd2832b4cd42516c4
> Author: Chuck Lever <chuck.lever@xxxxxxxxxx>
> Date:   Wed Oct 20 11:53:01 2010 -0400
> 
>    SUNRPC: Properly initialize sock_xprt.srcaddr in all cases
> 
>    The source address field in the transport's sock_xprt is initialized
>    ONLY IF the RPC application passed a pointer to a source address
>    during the call to rpc_create().  However, xs_bind() subsequently uses
>    the value of this field without regard to whether the source address
>    was initialized during transport creation or not.
> 
>    So far we've been lucky: the uninitialized value of this field is
>    zeroes.  xs_bind(), until recently, used only the sin[6]_addr field in
>    this sockaddr, and all zeroes is a valid value for this: it means
>    ANYADDR.  This is a happy coincidence.
> 
>    However, xs_bind() now wants to use the sa_family field as well, and
>    expects it to be initialized to something other than zero.
> 
>    Therefore, the source address sockaddr field should be fully
>    initialized at transport create time in _every_ case, not just when
>    the RPC application wants to use a specific bind address.
> 
>    Bruce added a workaround for this missing initialization by adjusting
>    commit 6bc9638a, but the "right" way to do this is to ensure that the
>    source address sockaddr is always correctly initialized from the
>    get-go.
> 
>    This patch doesn't introduce a behavior change.  It's simply a
>    clean-up of Bruce's fix, to prevent future problems of this kind.  It
>    may look like overkill, but
> 
>      a) it clearly documents the default initial value of this field,
> 
>      b) it doesn't assume that the sockaddr_storage memory is first
>         initialized to any particular value, and
> 
>      c) it will fail verbosely if some unknown address family is passed
>         in
> 
>    Originally introduced by commit d3bc9a1d.
> 
>    Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
>    Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxx>
> 
> :040000 040000 843e2423b5a45f7bc13b9e30cc8e5bcb072dbb8f 7148b5256ce78fd5c98a01f1bdcac46faa80f773 M	net
> 
> git bisect start
> # bad: [c8ddb2713c624f432fa5fe3c7ecffcdda46ea0d4] Linux 2.6.37-rc1
> git bisect bad c8ddb2713c624f432fa5fe3c7ecffcdda46ea0d4
> # good: [f6f94e2ab1b33f0082ac22d71f66385a60d8157f] Linux 2.6.36
> git bisect good f6f94e2ab1b33f0082ac22d71f66385a60d8157f
> # good: [33081adf8b89d5a716d7e1c60171768d39795b39] Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
> git bisect good 33081adf8b89d5a716d7e1c60171768d39795b39
> # bad: [00ebb6382b8d9c7c15b5f8ad230670d8161d38dd] Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
> git bisect bad 00ebb6382b8d9c7c15b5f8ad230670d8161d38dd
> # bad: [520045db940a381d2bee1c1b2179f7921b40fb10] Merge branches 'upstream/xenfs' and 'upstream/core' of git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen
> git bisect bad 520045db940a381d2bee1c1b2179f7921b40fb10
> # bad: [4390110fef9e5c64e10c6ca19d586932242c9a8a] Merge branch 'for-2.6.37' of git://linux-nfs.org/~bfields/linux
> git bisect bad 4390110fef9e5c64e10c6ca19d586932242c9a8a
> # good: [7b6181e06841f5ad15c4ff708b967b4db65a64de] Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
> git bisect good 7b6181e06841f5ad15c4ff708b967b4db65a64de
> # good: [e0e170bd7ded2ec16e2813d63c0faff43193fde8] Merge branch 'next' of git://git.monstr.eu/linux-2.6-microblaze
> git bisect good e0e170bd7ded2ec16e2813d63c0faff43193fde8
> # good: [22f793268de3b4dff8abfcd873ba7afc1f34224f] sunrpc: Factor out v4 sockets creation
> git bisect good 22f793268de3b4dff8abfcd873ba7afc1f34224f
> # good: [a4dd8dce14014665862ce7911b38cb2c69e366dd] Merge branch 'nfs-for-2.6.37' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
> git bisect good a4dd8dce14014665862ce7911b38cb2c69e366dd
> # bad: [cd5b814458e5554457c6e62f17aed122145b065e] nfsd4: don't cache seq_misordered replies
> git bisect bad cd5b814458e5554457c6e62f17aed122145b065e
> # good: [8c14ff2aaf26d58aa2258a59bd419c906d105938] sunrpc: Remove UDP worker wrappers
> git bisect good 8c14ff2aaf26d58aa2258a59bd419c906d105938
> # good: [8f3a6de313391b6910aa7db185eb9f3e930a51cf] sunrpc: Turn list_for_each-s into the ..._entry-s
> git bisect good 8f3a6de313391b6910aa7db185eb9f3e930a51cf
> # good: [4232e8634ad82c5a53389e4016de15a8b15c09c3] SUNRPC: Use conventional switch statement when reclassifying sockets
> git bisect good 4232e8634ad82c5a53389e4016de15a8b15c09c3
> # bad: [9247685088398cf21bcb513bd2832b4cd42516c4] SUNRPC: Properly initialize sock_xprt.srcaddr in all cases
> git bisect bad 9247685088398cf21bcb513bd2832b4cd42516c4
> 
> -- 
> Nick Bowler, Elliptic Technologies (http://www.elliptictech.com/)

-- 
Chuck Lever
chuck[dot]lever[at]oracle[dot]com




--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux