Hi All! This issue is discussed in details here: https://lkml.org/lkml/2014/2/17/324
With best regards, On Thu, Mar 19, 2015 at 2:10 PM, Iurii Konovalenko < iurii.konovale...@globallogic.com> wrote: > Hi, guys! > > When I read, that I am not alone and that issue depends on kernel > version, I decided to continue investigation. > And I found why our threads locks on read/write operations. > On Linux kernel 3.14+ syscalls of file read and write changed a bit: > fdget() function was replaced by fdget_pos() - it is fdget() function > plus additional position mutex lock for files with FMODE_ATOMIC_POS > (files for inodes with S_IFREG flag set - regular nodes). As I thought > our xen files are not regular and nonseekable, I hoped this flag is > not set. But it is set. It is because our file system is created by > function simple_fill_super(), and inside it this flag is hardly set: > inode->i_mode = S_IFREG | files->mode; > So, as a fast hack I made a patch: just made copy of this function for > xen, which does not set this flag. It works for me. Could you please > check if it works for you. > Best regards. > > Iurii Konovalenko | Senior Software Engineer > GlobalLogic > P +3.8044.492.9695 M +38.099.932.2909 > S yufuntik > www.globallogic.com > http://www.globallogic.com/email_disclaimer.txt > > > On Thu, Mar 19, 2015 at 12:38 PM, Ian Campbell <ian.campb...@citrix.com> > wrote: > > On Thu, 2015-03-19 at 02:19 +0100, Marek Marczykowski-Górecki wrote: > >> Hi, > >> > >> I've hit some deadlock in kernel xenstore client exposed via > >> /proc/xen/xenbus. > > > > Sounds similar to what Iurii also reported last night in "Userspace PV > > backend hangs". > > > > Iurri's case was all 3.14 kernels, which is in your range too. > > > >> Steps to reproduce are simple: > >> int main() { > >> struct xs_handle *xs; > >> xs = xs_open(0); > >> xs_watch(xs, "domid", "token"); > >> xs_read(xs, 0, "name", NULL); > >> return 0; > >> } > >> > >> xs_watch internally creates new thread, which uses read to wait for the > >> watch. And in the same time, the program tries to read some value, > >> but actually it hangs at sending the command (before even sending a > path to be > >> read). Strace gives this (simplified for readability): > >> [pid 2494] write(3, "\4\0\0\0\0\0\0\0\0\0\0\0\f\0\0\0", 160 = 16 > >> [pid 2494] write(3, "domid\0", 6) = 6 > >> [pid 2494] write(3, "token\0", 6) = 6 > >> [pid 2495] read(3, <unfinished ...> > >> [pid 2494] futex(0x71c0d4, FUTEX_WAIT_PRIVATE, 1, NULL <unfinished ...> > >> [pid 2495] <... read resumed> > >> "\17\0\0\0\377\377\377\377\220~\255\27\f\0\0\0", 16) = 16 > >> [pid 2495] read(3, "domid\0token\0", 12) = 12 > >> [pid 2495] read(3, "\4\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0", 16) = 16 > >> [pid 2495] read(3, "OK\0", 3) = 3 > >> [pid 2495] futex(0x71c0d4, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x71c0d0, > >> {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1} <unfinished ...> > >> [pid 2494] <... futex resumed> ) = 0 > >> [pid 2495] <... futex resumed> ) = 1 > >> [pid 2494] futex(0x71c0a8, FUTEX_WAIT_PRIVATE, 2, NULL <unfinished ...> > >> [pid 2495] futex(0x71c0a8, FUTEX_WAKE_PRIVATE, 1 <unfinished ...> > >> [pid 2494] <... futex resumed> ) = -1 EAGAIN (Resource > >> temporarily unavailable) > >> [pid 2495] <... futex resumed> ) = 0 > >> [pid 2494] futex(0x71c0a8, FUTEX_WAKE_PRIVATE, 1 <unfinished ...> > >> [pid 2495] read(3, <unfinished ...> > >> [pid 2494] <... futex resumed> ) = 0 > >> [pid 2494] rt_sigaction(SIGPIPE, {SIG_DFL, [], SA_RESTORER, > >> 0x7fc78c1488f0}, NULL, 8) = 0 > >> [pid 2494] rt_sigaction(SIGPIPE, {SIG_IGN, [], SA_RESTORER, > >> 0x7fc78c1488f0}, {SIG_DFL, [], SA_RESTORER, 0x7fc78c1488f0}, 8) = 0 > >> [pid 2494] write(3, "\2\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0", 16 > >> > >> And thats all - 2494 is waiting on write, 2495 is waiting on read. > >> > >> On 3.12.x it is working. On 3.17.0 and 3.18.7 it is broken. I haven't > >> checked versions in the middle. > >> > >> Any ideas? > >> > >> _______________________________________________ > >> Xen-devel mailing list > >> Xen-devel@lists.xen.org > >> http://lists.xen.org/xen-devel > > > > > > _______________________________________________ > Embedded-pv-devel mailing list > embedded-pv-de...@lists.xenproject.org > http://lists.xenproject.org/cgi-bin/mailman/listinfo/embedded-pv-devel > -- *Vitaly Chernooky | Senior Developer - Product Engineering and Development* GlobalLogic P *+380.44.4929695 ext.1136* M *+380.63.6011802* S cvv_2k www.globallogic.com http://www.globallogic.com/email_disclaimer.txt
_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel