Description of problem: In error-gen xlator when we use short-write error, it leads to crash. Version-Release number of selected component (if applicable): How reproducible: Steps to Reproduce: 1. Edit fuse volume file to include error-gen xlator between write-behind and dht 2. Make the following changes to mount volfile. ... volume patchy-utime type features/utime option noatime on subvolumes patchy-dht end-volume volume patchy-error-gen type debug/error-gen option failure 50 option enable WRITE subvolumes patchy-utime end-volume volume patchy-write-behind type performance/write-behind subvolumes patchy-error-gen end-volume ... 3. Mount the volume and run the following command: for i in {1..10}; do dd if=/dev/null of=$i bs=1M count=10 conv=fsync; done Thread 9 "glfs_iotwr000" received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7f3c44cbd700 (LWP 32368)] 0x00007f3c5722ef83 in __memmove_avx_unaligned_erms () from /lib64/libc.so.6 (gdb) bt #0 0x00007f3c5722ef83 in __memmove_avx_unaligned_erms () from /lib64/libc.so.6 #1 0x00007f3c457f4754 in ec_iov_copy_to (dst=0x7f3c569c0000, vector=0x7f3c3c002720, count=2, offset=0, size=117) at ec-helpers.c:118 #2 0x00007f3c458265e6 in ec_writev_prepare_buffers (ec=0x7f3c400663d0, fop=0x7f3c3000d930) at ec-inode-write.c:1849 #3 0x00007f3c45826ce0 in ec_writev_start (fop=0x7f3c3000d930) at ec-inode-write.c:2027 #4 0x00007f3c45827985 in ec_manager_writev (fop=0x7f3c3000d930, state=3) at ec-inode-write.c:2176 #5 0x00007f3c457fd311 in __ec_manager (fop=0x7f3c3000d930, error=0) at ec-common.c:2945 #6 0x00007f3c457fd41d in ec_manager (fop=0x7f3c3000d930, error=0) at ec-common.c:2963 #7 0x00007f3c458282d0 in ec_writev (frame=0x7f3c3001d830, this=0x7f3c4001c4a0, target=18446744073709551615, fop_flags=128, func=0x7f3c578c869e <default_writev_cbk>, data=0x0, fd=0x7f3c3c004340, vector=0x7f3c3c006510, count=2, offset=1703936, flags=32769, iobref=0x7f3c3c00b420, xdata=0x0) at ec-inode-write.c:2368 #8 0x00007f3c457f1d35 in ec_gf_writev (frame=0x7f3c3001d830, this=0x7f3c4001c4a0, fd=0x7f3c3c004340, vector=0x7f3c3c006510, count=2, offset=1703936, flags=32769, iobref=0x7f3c3c00b420, xdata=0x0) at ec.c:1341 #9 0x00007f3c578e02f1 in default_writev (frame=0x7f3c3001d830, this=0x7f3c4001e6c0, fd=0x7f3c3c004340, vector=0x7f3c3c006510, count=2, off=1703936, flags=32769, iobref=0x7f3c3c00b420, xdata=0x0) at defaults.c:2550 #10 0x00007f3c469e7400 in gf_utime_writev (frame=0x7f3c300088e0, this=0x7f3c40020690, fd=0x7f3c3c004340, vector=0x7f3c3c006510, count=2, off=1703936, flags=32769, iobref=0x7f3c3c00b420, xdata=0x0) at utime-autogen-fops.c:81 --Type <RET> for more, q to quit, c to continue without paging-- #11 0x00007f3c456e117d in error_gen_writev (frame=0x7f3c300088e0, this=0x7f3c400223d0, fd=0x7f3c3c004340, vector=0x7f3c44cbb760, count=2, off=1703936, flags=32769, iobref=0x7f3c3c00b420, xdata=0x0) at error-gen.c:771 #12 0x00007f3c456c1e3a in wb_fulfill_head (wb_inode=0x7f3c30002ce0, head=0x7f3c3000be40) at write-behind.c:1159 #13 0x00007f3c456c208d in wb_fulfill (wb_inode=0x7f3c30002ce0, liabilities=0x7f3c44cbb8b0) at write-behind.c:1216 #14 0x00007f3c456c3ba9 in wb_process_queue (wb_inode=0x7f3c30002ce0) at write-behind.c:1784 #15 0x00007f3c456c4675 in wb_writev (frame=0x7f3c3000fd90, this=0x7f3c40024320, fd=0x7f3c3c004340, vector=0x7f3c3c006580, count=1, offset=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at write-behind.c:1893 #16 0x00007f3c456ac01f in ra_writev (frame=0x7f3c300041f0, this=0x7f3c40025fd0, fd=0x7f3c3c004340, vector=0x7f3c3c006580, count=1, offset=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at read-ahead.c:650 #17 0x00007f3c45697161 in rda_writev (frame=0x7f3c30011c60, this=0x7f3c40027ba0, fd=0x7f3c3c004340, vector=0x7f3c3c006580, count=1, off=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at readdir-ahead.c:786 #18 0x00007f3c4567dcbb in ioc_writev (frame=0x7f3c3000b130, this=0x7f3c40029c70, fd=0x7f3c3c004340, vector=0x7f3c3c006580, count=1, offset=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at io-cache.c:1305 #19 0x00007f3c578d4798 in default_writev_resume (frame=0x7f3c3001d830, this=0x7f3c4002b850, fd=0x7f3c3c004340, vector=0x7f3c3c006580, count=1, off=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at defaults.c:1831 --Type <RET> for more, q to quit, c to continue without paging-- #20 0x00007f3c5782533b in call_resume_wind (stub=0x7f3c3001b6f0) at call-stub.c:2085 #21 0x00007f3c5783710c in call_resume (stub=0x7f3c3001b6f0) at call-stub.c:2555 #22 0x00007f3c45665362 in open_and_resume (this=0x7f3c4002b850, fd=0x7f3c3c004340, stub=0x7f3c3001b6f0) at open-behind.c:480 #23 0x00007f3c45666a5c in ob_writev (frame=0x7f3c3001d830, this=0x7f3c4002b850, fd=0x7f3c3c004340, iov=0x7f3c3c001e30, count=1, offset=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at open-behind.c:678 #24 0x00007f3c4565545d in qr_writev (frame=0x7f3c300088e0, this=0x7f3c4002d440, fd=0x7f3c3c004340, iov=0x7f3c3c001e30, count=1, offset=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at quick-read.c:849 #25 0x00007f3c4563601e in mdc_writev (frame=0x7f3c300066d0, this=0x7f3c4002f010, fd=0x7f3c3c004340, vector=0x7f3c3c001e30, count=1, offset=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at md-cache.c:2082 #26 0x00007f3c578d4798 in default_writev_resume (frame=0x7f3c3c006df0, this=0x7f3c40030c00, fd=0x7f3c3c004340, vector=0x7f3c3c001e30, count=1, off=1966080, flags=32769, iobref=0x7f3c3c0068d0, xdata=0x0) at defaults.c:1831 #27 0x00007f3c5782533b in call_resume_wind (stub=0x7f3c3c009950) at call-stub.c:2085 #28 0x00007f3c5783710c in call_resume (stub=0x7f3c3c009950) at call-stub.c:2555 #29 0x00007f3c4561b372 in iot_worker (data=0x7f3c40040a30) at io-threads.c:232 #30 0x00007f3c5757e5a2 in start_thread () from /lib64/libpthread.so.0 #31 0x00007f3c571cb023 in clone () from /lib64/libc.so.6 (gdb) fr 11 #11 0x00007f3c456e117d in error_gen_writev (frame=0x7f3c300088e0, this=0x7f3c400223d0, fd=0x7f3c3c004340, vector=0x7f3c44cbb760, count=2, off=1703936, flags=32769, iobref=0x7f3c3c00b420, xdata=0x0) at error-gen.c:771 771 STACK_WIND_TAIL(frame, FIRST_CHILD(this), FIRST_CHILD(this)->fops->writev, (gdb) p count $1 = 2 Actual results: Expected results: Additional info:
REVIEW: https://review.gluster.org/23318 (debug/error-gen: Set count correctly for short-writes) posted (#1) for review on master by Pranith Kumar Karampuri
REVIEW: https://review.gluster.org/23318 (debug/error-gen: Set count correctly for short-writes) merged (#2) on master by Amar Tumballi